2006-09-22 00:22:34 +08:00
2015-07-30 22:53:28 +08:00
<!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" >
2015-12-20 02:42:24 +08:00
< title > 2. Getting Started — LAMMPS 17 Dec 2015 documentation< / title >
2015-07-30 22:53:28 +08:00
2006-09-22 00:22:34 +08:00
2015-07-30 22:53:28 +08:00
2006-09-22 00:22:34 +08:00
2015-07-30 22:53:28 +08:00
2006-09-22 00:22:34 +08:00
2015-07-30 22:53:28 +08:00
2006-09-22 00:22:34 +08:00
2015-07-30 22:53:28 +08:00
2006-09-22 00:22:34 +08:00
2015-07-30 22:53:28 +08:00
< link rel = "stylesheet" href = "_static/css/theme.css" type = "text/css" / >
2006-09-22 00:22:34 +08:00
2015-07-30 22:53:28 +08:00
< link rel = "stylesheet" href = "_static/sphinxcontrib-images/LightBox2/lightbox2/css/lightbox.css" type = "text/css" / >
2006-09-22 00:22:34 +08:00
2015-07-30 22:53:28 +08:00
2015-12-20 02:42:24 +08:00
< link rel = "top" title = "LAMMPS 17 Dec 2015 documentation" href = "index.html" / >
2015-07-30 22:53:28 +08:00
< link rel = "next" title = "3. Commands" href = "Section_commands.html" / >
< link rel = "prev" title = "1. Introduction" href = "Section_intro.html" / >
2011-12-09 08:44:47 +08:00
2015-07-30 22:53:28 +08:00
< 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’ 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 >
2015-10-22 02:52:59 +08:00
< 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 >
2015-07-30 22:53:28 +08:00
< 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 & 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 & 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 >
2015-07-30 22:38:28 +08:00
2015-07-30 22:53:28 +08:00
< / div >
< / 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 > » < / 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< a class = "headerlink" href = "#getting-started" title = "Permalink to this headline" > ¶< / a > < / 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 > What’ s in the LAMMPS distribution< / span > < / a > < / div >
< div class = "line" > 2.2 < a class = "reference internal" href = "#start-2" > < span > Making LAMMPS< / span > < / a > < / div >
< div class = "line" > 2.3 < a class = "reference internal" href = "#start-3" > < span > Making LAMMPS with optional packages< / span > < / a > < / div >
< div class = "line" > 2.4 < a class = "reference internal" href = "#start-4" > < span > Building LAMMPS via the Make.py script< / span > < / a > < / div >
< div class = "line" > 2.5 < a class = "reference internal" href = "#start-5" > < span > Building LAMMPS as a library< / span > < / a > < / div >
< div class = "line" > 2.6 < a class = "reference internal" href = "#start-6" > < span > Running LAMMPS< / span > < / a > < / div >
< div class = "line" > 2.7 < a class = "reference internal" href = "#start-7" > < span > Command-line options< / span > < / a > < / div >
< div class = "line" > 2.8 < a class = "reference internal" href = "#start-8" > < span > Screen output< / span > < / a > < / div >
< div class = "line" > 2.9 < a class = "reference internal" href = "#start-9" > < span > 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’ s in the LAMMPS distribution< a class = "headerlink" href = "#what-s-in-the-lammps-distribution" title = "Permalink to this headline" > ¶< / a > < / 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-python" > < div class = "highlight" > < pre > gunzip lammps*.tar.gz
tar xvf lammps*.tar
< / 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 = "download" > download page< / a > also has links to download
2014-09-06 04:21:00 +08:00
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
2015-07-30 22:53:28 +08:00
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
2014-09-06 04:21:00 +08:00
stated on the download page. If you want an executable with
2015-07-30 22:53:28 +08:00
non-included packages or that is more current, then you’ 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 > 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< a class = "headerlink" href = "#making-lammps" title = "Permalink to this headline" > ¶< / a > < / h2 >
< p > This section has the following sub-sections:< / p >
< ul class = "simple" >
< li > < a class = "reference internal" href = "#start-2-1" > < span > Read this first< / span > < / a > < / li >
< li > < a class = "reference internal" href = "#start-2-2" > < span > Steps to build a LAMMPS executable< / span > < / a > < / li >
< li > < a class = "reference internal" href = "#start-2-3" > < span > Common errors that can occur when making LAMMPS< / span > < / a > < / li >
< li > < a class = "reference internal" href = "#start-2-4" > < span > Additional build tips< / span > < / a > < / li >
< li > < a class = "reference internal" href = "#start-2-5" > < span > Building for a Mac< / span > < / a > < / li >
< li > < a class = "reference internal" href = "#start-2-6" > < span > Building for Windows< / span > < / a > < / li >
< / ul >
< hr class = "docutils" / >
< p id = "start-2-1" > < strong > *Read this first:*< / strong > < / p >
< p > If you want to avoid building LAMMPS yourself, read the preceeding
2014-10-07 23:08:33 +08:00
section about options available for downloading and installing
2015-07-30 22:53:28 +08:00
executables. Details are discussed on the < a class = "reference external" href = "download" > download< / a > page.< / p >
< p > Building LAMMPS can be simple or not-so-simple. If all you need are
2014-10-07 23:08:33 +08:00
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
2015-07-30 22:53:28 +08:00
src/MAKE by typing one of these lines (from the src dir):< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > make mpi
make serial
< / pre > < / div >
< / div >
< p > Note that on a facility supercomputer, there are often “ modules”
2014-10-07 23:24:37 +08:00
loaded in your environment that provide the compilers and MPI you
2015-07-30 22:53:28 +08:00
should use. In this case, the “ mpicxx” 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 “ make”
to see a list), you can use it as-is by typing (for example):< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > make stampede
< / pre > < / div >
< / div >
< p > If any of these builds (with an existing Makefile.machine) works on
your system, then you’ 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
2014-09-06 04:21:00 +08:00
auxiliary libraries exist on your machine or install them if they
2015-07-30 22:53:28 +08:00
don’ t. You may need to build additional libraries that are part of
2014-09-06 04:21:00 +08:00
the LAMMPS package, before building LAMMPS. You may need to edit a
2015-07-30 22:53:28 +08:00
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
2014-10-07 23:08:33 +08:00
several of these steps, but you still have to know what you are doing.
2015-07-30 22:53:28 +08:00
< a class = "reference internal" href = "#start-4" > < span > Section 2.4< / span > < / a > below describes the tool. It is a convenient
2014-10-07 23:08:33 +08:00
way to work with installing/un-installing various packages, the
Makefile.machine changes required by some packages, and the auxiliary
2015-07-30 22:53:28 +08:00
libraries some of them use.< / p >
< p > Please read the following sections carefully. If you are not
2014-09-06 04:21:00 +08:00
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
2015-07-30 22:53:28 +08:00
often not really LAMMPS issues - they are peculiar to the user’ s
2014-09-06 04:21:00 +08:00
system, compilers, libraries, etc. Such questions are better answered
2015-07-30 22:53:28 +08:00
by a local expert.< / p >
< p > If you have a build problem that you are convinced is a LAMMPS issue
2006-09-22 00:22:34 +08:00
(e.g. the compiler complains about a line of LAMMPS source code), then
2015-07-30 22:53:28 +08:00
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’ t a similar machine Makefile included in the
2014-10-07 23:24:37 +08:00
src/MAKE/MACHINES directory, then send it to the developers and we can
2015-07-30 22:53:28 +08:00
include it in the LAMMPS distribution.< / p >
< hr class = "docutils" / >
< p id = "start-2-2" > < strong > *Steps to build a LAMMPS executable:*< / strong > < / p >
< p > < strong > Step 0< / strong > < / p >
< p > The src directory contains the C++ source and header files for LAMMPS.
2007-05-01 08:14:45 +08:00
It also contains a top-level Makefile and a MAKE sub-directory with
2014-10-07 23:08:33 +08:00
low-level Makefile.* files for many systems and machines. See the
src/MAKE/README file for a quick overview of what files are available
2015-07-30 22:53:28 +08:00
and what sub-directories they are in.< / p >
< p > The src/MAKE dir has a few files that should work as-is on many
2015-04-28 00:10:33 +08:00
platforms. The src/MAKE/OPTIONS dir has more that invoke additional
2014-10-07 23:08:33 +08:00
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
2015-07-30 22:53:28 +08:00
it will be never be touched by any LAMMPS updates.< / p >
< p > > From within the src directory, type “ make” or “ gmake” . You should see
2014-10-07 23:08:33 +08:00
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
2015-07-30 22:53:28 +08:00
machine you want, you can type a command like:< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > make mpi
2014-10-07 23:08:33 +08:00
or
make serial_icc
2011-08-19 01:31:58 +08:00
or
2015-07-30 22:53:28 +08:00
gmake mac
< / pre > < / div >
< / div >
< p > Note that the corresponding Makefile.machine can exist in src/MAKE or
2014-10-07 23:08:33 +08:00
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
2015-07-30 22:53:28 +08:00
src/MAKE/MINE.< / p >
< p > 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.< / p >
< p > 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.< / 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 > 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
2011-08-19 01:31:58 +08:00
for your machine, like Makefile.foo. You should make a copy of an
2014-10-07 23:08:33 +08:00
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
2015-07-30 22:53:28 +08:00
the first line, the “ compiler/linker settings” section, and the
“ LAMMPS-specific settings” section. When it works, put the edited
2014-10-07 23:08:33 +08:00
file in src/MAKE/MINE and it will not be altered by any future LAMMPS
2015-07-30 22:53:28 +08:00
updates.< / p >
< p > < strong > Step 2< / strong > < / p >
< p > 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” .< / p >
< p > < strong > Step 3< / strong > < / p >
< p > The “ compiler/linker settings” section lists compiler and linker
2009-10-30 05:37:40 +08:00
settings for your C++ compiler, including optimization flags. You can
use g++, the open-source GNU compiler, which is available on all Unix
2014-10-07 23:08:33 +08:00
systems. You can also use mpicxx which will typically be available if
2009-10-30 05:37:40 +08:00
MPI is installed on your system, though you should check which actual
compiler it wraps. Vendor compilers often produce faster code. On
2014-10-07 23:08:33 +08:00
boxes with Intel CPUs, we suggest using the Intel icc compiler, which
2015-07-30 22:53:28 +08:00
can be downloaded from < a class = "reference external" href = "http://www.intel.com/software/products/noncom" > Intel’ s compiler site< / a > .< / p >
< p > If building a C++ code on your machine requires additional libraries,
2014-10-07 23:08:33 +08:00
then you should list them as part of the LIB variable. You should
2015-07-30 22:53:28 +08:00
not need to do this if you use mpicxx.< / p >
< p > The DEPFLAGS setting is what triggers the C++ compiler to create a
2009-10-30 05:37:40 +08:00
dependency list for a source file. This speeds re-compilation when
2015-07-30 22:53:28 +08:00
source (< em > .cpp) or header (< / em > .h) files are edited. Some compilers do
2009-10-30 05:37:40 +08:00
not support dependency file creation, or may use a different switch
2015-07-30 22:53:28 +08:00
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
2014-10-07 23:08:33 +08:00
patterned after Makefile.storm, which uses different rules that do not
involve dependency files. Note that when you build LAMMPS for the
2015-07-30 22:53:28 +08:00
first time on a new platform, a long list of < a href = "#id1" > < span class = "problematic" id = "id2" > *< / span > < / a > .d files will be printed
2014-10-07 23:08:33 +08:00
out rapidly. This is not an error; it is the Makefile doing its
2015-07-30 22:53:28 +08:00
normal creation of dependencies.< / p >
< p > < strong > Step 4< / strong > < / p >
< p > The “ system-specific settings” section has several parts. Note that
2011-08-19 01:31:58 +08:00
if you change any -D setting in this section, you should do a full
2015-07-30 22:53:28 +08:00
re-compile, after typing “ make clean” (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
2013-11-05 00:59:03 +08:00
compile with -DLAMMPS_GZIP. It requires that your machine supports
2015-08-19 23:38:41 +08:00
the “ popen()” function in the standard runtime library and that a gzip
2015-07-30 22:53:28 +08:00
executable can be found by LAMMPS during a run.< / p >
2015-12-11 01:23:56 +08:00
< 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
2015-08-19 23:38:41 +08:00
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 >
2015-07-30 22:53:28 +08:00
< p > If you use -DLAMMPS_JPEG, the < a class = "reference internal" href = "dump_image.html" > < em > dump image< / em > < / a > command
2013-11-05 00:59:03 +08:00
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
2015-07-30 22:53:28 +08:00
-DLAMMPS_PNG, the < a class = "reference internal" href = "dump.html" > < em > dump image< / em > < / a > command will be able to write
2013-10-30 23:10:46 +08:00
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
2013-11-05 00:59:03 +08:00
used, LAMMPS will only be able to write out uncompressed PPM image
2015-07-30 22:53:28 +08:00
files.< / p >
< p > If you use -DLAMMPS_FFMPEG, the < a class = "reference internal" href = "dump_image.html" > < em > dump movie< / em > < / a > command
2013-11-05 00:59:03 +08:00
will be available to support on-the-fly generation of rendered movies
the need to store intermediate image files. It requires that your
2015-07-30 22:53:28 +08:00
machines supports the “ popen” function in the standard runtime library
and that an FFmpeg executable can be found by LAMMPS during the run.< / p >
2015-12-11 01:23:56 +08:00
< 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 >
2015-08-19 23:38:41 +08:00
< / div >
2015-07-30 22:53:28 +08:00
< p > Using -DLAMMPS_MEMALIGN=< bytes> enables the use of the
2011-12-01 23:35:32 +08:00
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
2015-07-30 22:53:28 +08:00
performance.< / p >
< p > If you use -DLAMMPS_XDR, the build will include XDR compatibility
2009-10-30 01:54:40 +08:00
files for doing particle dumps in XTC format. This is only necessary
if your platform does have its own XDR files available. See the
2015-07-30 22:53:28 +08:00
Restrictions section of the < a class = "reference internal" href = "dump.html" > < em > dump< / em > < / a > command for details.< / p >
< p > Use at most one of the -DLAMMPS_SMALLBIG, -DLAMMPS_BIGBIG, -D-
2015-01-21 07:38:04 +08:00
DLAMMPS_SMALLSMALL settings. The default is -DLAMMPS_SMALLBIG. These
2014-01-18 03:02:13 +08:00
settings refer to use of 4-byte (small) vs 8-byte (big) integers
2012-06-26 06:22:46 +08:00
within LAMMPS, as specified in src/lmptype.h. The only reason to use
the BIGBIG setting is to enable simulation of huge molecular systems
2014-01-18 03:02:13 +08:00
(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
2015-01-21 07:38:04 +08:00
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).
2015-07-30 22:53:28 +08:00
See the < a class = "reference internal" href = "#start-2-4" > < span > Additional build tips< / span > < / a > section below for more
details on these settings.< / p >
< p > Note that two packages, USER-ATC and USER-CUDA are not currently
2015-01-21 07:38:04 +08:00
compatible with -DLAMMPS_BIGBIG. Also the GPU package requires the
lib/gpu library to be compiled with the same setting, or the link will
2015-07-30 22:53:28 +08:00
fail.< / p >
< p > 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.< / p >
< p > Using one of the -DPACK_ARRAY, -DPACK_POINTER, and -DPACK_MEMCPY
2011-08-19 04:48:51 +08:00
options can make for faster parallel FFTs (in the PPPM solver) on some
platforms. The -DPACK_ARRAY setting is the default. See the
2015-07-30 22:53:28 +08:00
< a class = "reference internal" href = "kspace_style.html" > < em > kspace_style< / em > < / 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
2014-10-07 23:08:33 +08:00
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.
2015-07-30 22:53:28 +08:00
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
2014-10-07 23:08:33 +08:00
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
2015-07-30 22:53:28 +08:00
parallel machines which use “ modules” for their compile/link
2014-10-07 23:08:33 +08:00
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
2015-07-30 22:53:28 +08:00
trouble finding.< / p >
< p > Failing this, these 3 variables can be used to specify where the mpi.h
2011-08-19 01:31:58 +08:00
file (MPI_INC) and the MPI library file (MPI_PATH) are found and the
2015-07-30 22:53:28 +08:00
name of the library file (MPI_LIB).< / p >
< p > If you are installing MPI yourself, we recommend Argonne’ 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 > .
2011-10-01 00:56:12 +08:00
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
2011-04-12 03:49:41 +08:00
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
2015-07-30 22:53:28 +08:00
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’ t need a true
2014-10-07 23:08:33 +08:00
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,
2015-07-30 22:53:28 +08:00
e.g. by typing “ make serial” , then the STUBS library is built for you.< / p >
< p > To build the STUBS library from the src directory, type “ make
mpi-stubs” , or from the src/STUBS dir, type “ make” . This should
2015-03-05 01:30:20 +08:00
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
2015-07-30 22:53:28 +08:00
platform.< / p >
< p > 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.
2014-10-07 23:08:33 +08:00
Note that the ANSI-standard function clock() rolls over after an hour
or so, and is therefore insufficient for timing long LAMMPS
2015-07-30 22:53:28 +08:00
simulations.< / p >
< p > < strong > Step 6< / strong > < / p >
< p > The 3 FFT variables allow you to specify an FFT library which LAMMPS
2011-08-19 01:31:58 +08:00
uses (for performing 1d FFTs) when running the particle-particle
particle-mesh (PPPM) option for long-range Coulombics via the
2015-07-30 22:53:28 +08:00
< a class = "reference internal" href = "kspace_style.html" > < em > kspace_style< / em > < / a > command.< / p >
< p > LAMMPS supports various open-source or vendor-supplied FFT libraries
2011-08-19 01:31:58 +08:00
for this purpose. If you leave these 3 variables blank, LAMMPS will
2015-07-30 22:53:28 +08:00
use the open-source < a class = "reference external" href = "http://kissfft.sf.net" > KISS FFT library< / a > , which is
2011-08-19 01:31:58 +08:00
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
2015-07-30 22:53:28 +08:00
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
2011-08-19 01:31:58 +08:00
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
2015-07-30 22:53:28 +08:00
described above.< / p >
< p > You may also need to set the FFT_INC, FFT_PATH, and FFT_LIB variables,
2011-08-19 01:31:58 +08:00
so the compiler and linker can find the needed FFT header and library
2015-07-30 22:53:28 +08:00
files. Note that on some large parallel machines which use “ modules”
2011-08-19 01:31:58 +08:00
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
2015-07-30 22:53:28 +08:00
trouble finding.< / p >
< p > FFTW is a fast, portable library that should also work on any
2011-08-09 01:51:46 +08:00
platform. You can download it from
2015-07-30 22:53:28 +08:00
< a class = "reference external" href = "http://www.fftw.org" > www.fftw.org< / a > . Both the legacy version 2.1.X and
2011-08-19 01:31:58 +08:00
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
2012-01-11 06:39:38 +08:00
specify an additional define variable for FFT_INC called -DFFTW_SIZE,
2011-08-19 01:31:58 +08:00
which will select the correct include file. In this case, for FFT_LIB
you must also manually specify the correct library, namely -lsfftw or
2015-07-30 22:53:28 +08:00
-ldfftw.< / p >
< p > The FFT_INC variable also allows for a -DFFT_SINGLE setting that will
2011-08-19 01:31:58 +08:00
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
2015-07-30 22:53:28 +08:00
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" > < em > dump image< / em > < / a > command. These can be left blank if you do not
2013-10-30 23:10:46 +08:00
use the -DLAMMPS_JPEG or -DLAMMPS_PNG switches discussed above in Step
2015-07-30 22:53:28 +08:00
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
2013-10-30 23:10:46 +08:00
libjpeg.so and has an associated header file jpeglib.h. Whichever
2015-07-30 22:53:28 +08:00
JPEG library you have on your platform, you’ ll need to set the
2013-10-30 23:10:46 +08:00
appropriate JPG_INC, JPG_PATH, and JPG_LIB variables, so that the
2015-07-30 22:53:28 +08:00
compiler and linker can find it.< / p >
< p > A standard PNG library usually goes by the name libpng.a or libpng.so
2013-10-30 23:10:46 +08:00
and has an associated header file png.h. Whichever PNG library you
2015-07-30 22:53:28 +08:00
have on your platform, you’ ll need to set the appropriate JPG_INC,
2013-10-30 23:10:46 +08:00
JPG_PATH, and JPG_LIB variables, so that the compiler and linker can
2015-07-30 22:53:28 +08:00
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 > this section< / span > < / a > below, before proceeding to Step 9.< / p >
< p > < strong > Step 9< / strong > < / p >
< p > That’ s it. Once you have a correct Makefile.foo, and you have
2014-10-07 23:08:33 +08:00
pre-built any other needed libraries (e.g. MPI, FFT, etc) all you need
2015-07-30 22:53:28 +08:00
to do from the src directory is type something like this:< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > make foo
2011-08-19 01:31:58 +08:00
or
2015-07-30 22:53:28 +08:00
gmake foo
< / pre > < / div >
< / div >
< p > You should get the executable lmp_foo when the build is complete.< / p >
< hr class = "docutils" / >
< p id = "start-2-3" > < strong > *Errors that can occur when making LAMMPS:*< / strong > < / p >
2015-12-11 01:23:56 +08:00
< 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 >
2015-07-30 22:53:28 +08:00
< / 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’ 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
2011-08-19 01:31:58 +08:00
a -f switch with your make command to use a pre-generated
2015-07-30 22:53:28 +08:00
Makefile.list which explicitly lists all the needed files, e.g.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > make makelist
2011-08-19 01:31:58 +08:00
make -f Makefile.list linux
2015-07-30 22:53:28 +08:00
gmake -f Makefile.list mac
< / pre > < / div >
< / div >
< p > 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
2011-08-19 01:31:58 +08:00
gmake) will use it to build LAMMPS. Note that you should
2015-07-30 22:53:28 +08:00
include/exclude any desired optional packages before using the “ make
makelist” command.< / p >
< p > (2) If you get an error that says something like ‘ identifier “ atoll”
is undefined’ , then your machine does not support “ long long”
2011-08-19 04:48:51 +08:00
integers. Try using the -DLAMMPS_LONGLONG_TO_LONG setting described
2015-07-30 22:53:28 +08:00
above in Step 4.< / p >
< hr class = "docutils" / >
< p id = "start-2-4" > < strong > *Additional build tips:*< / strong > < / 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
2008-03-19 05:09:15 +08:00
directory. Each target creates its own object sub-directory called
2015-07-30 22:53:28 +08:00
Obj_target where it stores the system-specific < a href = "#id3" > < span class = "problematic" id = "id4" > *< / span > < / a > .o files.< / p >
< ol class = "arabic simple" start = "2" >
< li > Cleaning up.< / li >
< / ol >
< p > Typing “ make clean-all” or “ make clean-machine” will delete < a href = "#id5" > < span class = "problematic" id = "id6" > *< / span > < / a > .o object
2009-10-30 01:54:40 +08:00
files created when LAMMPS is built, for either all builds or for a
2015-07-30 22:53:28 +08:00
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
2014-01-18 03:02:13 +08:00
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
2015-07-30 22:53:28 +08:00
integers.< / p >
< p > Likewise, with this setting, the 3 image flags for each atom (see the
< a class = "reference internal" href = "dump.html" > < em > dump< / em > < / a > doc page for a discussion) are stored in a 32-bit
2014-01-18 03:02:13 +08:00
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
2015-07-30 22:53:28 +08:00
box more than this many times, the image flags will “ roll over” ,
2014-01-18 03:02:13 +08:00
e.g. from 511 to -512, which can cause diagnostics like the
2015-07-30 22:53:28 +08:00
mean-squared displacement, as calculated by the < a class = "reference internal" href = "compute_msd.html" > < em > compute msd< / em > < / a > command, to be faulty.< / p >
< p > To allow for larger atomic systems with atom IDs or larger molecular
2014-01-18 03:02:13 +08:00
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
2015-07-30 22:53:28 +08:00
9e18). And image flags will not “ roll over” until they reach 2^20 =
1048576.< / p >
< p > If your system does not support 8-byte integers, you will need to
2014-01-18 03:02:13 +08:00
compile with the -DLAMMPS_SMALLSMALL setting. This will restrict the
total number of atoms (for atomic or molecular systems) and timesteps
2015-07-30 22:53:28 +08:00
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
2014-01-18 03:02:13 +08:00
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
2015-07-30 22:53:28 +08:00
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" > < strong > *Building for a Mac:*< / strong > < / 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" > < strong > *Building for Windows:*< / strong > < / 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 > 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
2014-05-22 22:20:18 +08:00
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
2015-07-30 22:53:28 +08:00
obtain those.< / p >
< p > As an alternative, you can download “ daily builds” (and some older
2014-05-22 22:20:18 +08:00
versions) of the installer packages from
2015-07-30 22:53:28 +08:00
< a class = "reference external" href = "http://rpm.lammps.org/windows.html" > rpm.lammps.org/windows.html< / a > .
2014-05-22 22:20:18 +08:00
These executables are built with most optional packages and the
2015-07-30 22:53:28 +08:00
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
2014-05-22 22:20:18 +08:00
standard unix style make program, just as you would on a Linux box;
2015-07-30 22:53:28 +08:00
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< a class = "headerlink" href = "#making-lammps-with-optional-packages" title = "Permalink to this headline" > ¶< / a > < / h2 >
< p > This section has the following sub-sections:< / p >
< ul class = "simple" >
< li > < a class = "reference internal" href = "#start-3-1" > < span > Package basics< / span > < / a > < / li >
< li > < a class = "reference internal" href = "#start-3-2" > < span > Including/excluding packages< / span > < / a > < / li >
< li > < a class = "reference internal" href = "#start-3-3" > < span > Packages that require extra libraries< / span > < / a > < / li >
< li > < a class = "reference internal" href = "#start-3-4" > < span > Packages that require Makefile.machine settings< / span > < / a > < / li >
< / ul >
< p > Note that the following < a class = "reference internal" href = "#start-4" > < span > Section 2.4< / span > < / a > describes the Make.py
2014-10-07 23:08:33 +08:00
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
2015-07-30 22:53:28 +08:00
Makefile.machine to add settings needed by some packages.< / p >
< hr class = "docutils" / >
< p id = "start-3-1" > < strong > *Package basics:*< / strong > < / p >
< p > The source code for LAMMPS is structured as a set of core files which
2011-08-19 01:31:58 +08:00
are always included, plus optional packages. Packages are groups of
files that enable a specific set of features. For example, force
2015-07-30 22:53:28 +08:00
fields for molecular systems or granular systems are in packages.< / p >
< p > You can see the list of all packages by typing “ make package” from
2014-10-07 23:08:33 +08:00
within the src directory of the LAMMPS distribution. This also lists
2015-07-30 22:53:28 +08:00
various make commands that can be used to manipulate packages.< / p >
< p > If you use a command in a LAMMPS input script that is specific to a
2011-08-26 02:01:18 +08:00
particular package, you must have built LAMMPS with that package, else
you will get an error that the style is invalid or the command is
2015-07-30 22:53:28 +08:00
unknown. Every command’ s doc page specfies if it is part of a
package. You can also type< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > < span class = "n" > lmp_machine< / span > < span class = "o" > -< / span > < span class = "n" > h< / span >
< / pre > < / div >
< / div >
2015-10-22 02:52:59 +08:00
< p > to run your executable with the optional < a class = "reference internal" href = "#start-7" > < span > -h command-line switch< / span > < / a > for “ help” , which will simply list the styles and
commands known to your executable, and immediately exit.< / p >
2015-07-30 22:53:28 +08:00
< p > There are two kinds of packages in LAMMPS, standard and user packages.
2011-08-26 02:01:18 +08:00
More information about the contents of standard and user packages is
2015-07-30 22:53:28 +08:00
given in < a class = "reference internal" href = "Section_packages.html" > < em > Section_packages< / em > < / a > of the manual. The
difference between standard and user packages is as follows:< / p >
2015-10-22 02:52:59 +08:00
< 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 >
2015-07-30 22:53:28 +08:00
< p > User packages don’ t necessarily meet the requirements of the standard
2011-08-26 02:01:18 +08:00
packages. If you have problems using a feature provided in a user
2015-10-22 02:52:59 +08:00
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 > this section< / span > < / a > of the documentation.< / p >
< p > Some packages (both standard and user) require additional auxiliary
libraries when building LAMMPS. See more details below.< / p >
2015-07-30 22:53:28 +08:00
< hr class = "docutils" / >
< p id = "start-3-2" > < strong > *Including/excluding packages:*< / strong > < / p >
2015-10-22 02:52:59 +08:00
< 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 >
2015-07-30 22:53:28 +08:00
< div class = "highlight-python" > < div class = "highlight" > < pre > make yes-colloid
make g++
< / pre > < / div >
< / div >
< p > or< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > make no-manybody
make g++
< / pre > < / div >
< / div >
2015-12-11 01:23:56 +08:00
< 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 >
2015-07-30 22:53:28 +08:00
< / div >
< p > Some packages have individual files that depend on other packages
2011-08-19 01:31:58 +08:00
being included. LAMMPS checks for this and does the right thing.
2011-05-27 07:45:23 +08:00
I.e. individual files are only included if their dependencies are
already included. Likewise, if a package is excluded, other files
2015-07-30 22:53:28 +08:00
dependent on that package are also excluded.< / p >
< p > If you will never run simulations that use the features in a
2014-10-07 23:08:33 +08:00
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
2015-07-30 22:53:28 +08:00
which may run a bit faster.< / p >
< p > When you download a LAMMPS tarball, these packages are pre-installed
2011-08-27 02:53:00 +08:00
in the src directory: KSPACE, MANYBODY,MOLECULE. When you download
LAMMPS source files from the SVN or Git repositories, no packages are
2015-07-30 22:53:28 +08:00
pre-installed.< / p >
< p > 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.
2011-08-27 02:53:00 +08:00
name = kspace for the KSPACE package or name = user-atc for the
2015-07-30 22:53:28 +08:00
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-all” or “ make no-all” to include/exclude various
sets of packages. Type “ make package” to see the all of the
package-related make options.< / p >
2015-12-11 01:23:56 +08:00
< 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 >
2015-07-30 22:53:28 +08:00
< / div >
< p > Additional package-related make options exist to help manage LAMMPS
2011-08-19 01:31:58 +08:00
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
2015-07-30 22:53:28 +08:00
the LAMMPS WWW site.< / p >
< p > Typing “ make package-update” or “ make pu” will overwrite src files
2014-10-07 23:08:33 +08:00
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
2015-07-30 22:53:28 +08:00
files. Typing “ make package-overwrite” will overwrite files in the
package sub-directories with src files.< / p >
< p > Typing “ make package-status” or “ make ps” will show which packages are
2014-10-07 23:08:33 +08:00
currently included. Of those that are included, it will list files
that are different in the src directory and package sub-directory.
2015-07-30 22:53:28 +08:00
Typing “ make package-diff” lists all differences between these files.
Again, type “ make package” to see all of the package-related make
options.< / p >
< hr class = "docutils" / >
< p id = "start-3-3" > < strong > *Packages that require extra libraries:*< / strong > < / p >
< p > A few of the standard and user packages require additional auxiliary
2015-10-22 02:52:59 +08:00
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
2015-03-18 00:05:28 +08:00
that package. If you get a LAMMPS build error about a missing
library, this is likely the reason. See the
2015-07-30 22:53:28 +08:00
< a class = "reference internal" href = "Section_packages.html" > < em > Section_packages< / em > < / 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
2015-10-22 02:52:59 +08:00
names that correspond to the needed auxiliary libs, e.g. lib/gpu.
2015-01-09 07:53:59 +08:00
Each sub-directory has a README file that gives more details. Code
for most of the auxiliary libraries is included in that directory.
2015-07-30 22:53:28 +08:00
Examples are the USER-ATC and MEAM packages.< / p >
< p > A few of the lib sub-directories do not include code, but do include
2015-10-22 02:52:59 +08:00
instructions (and sometimes scripts) that automate the process of
2015-03-18 00:05:28 +08:00
downloading the auxiliary library and installing it so LAMMPS can link
2015-10-22 02:52:59 +08:00
to it. Examples are the KIM, VORONOI, USER-MOLFILE, and USER-SMD
2015-08-11 07:47:55 +08:00
packages.< / p >
2015-07-30 22:53:28 +08:00
< p > The lib/python directory (for the PYTHON package) contains only a
2015-03-18 00:05:28 +08:00
choice of Makefile.lammps.* files. This is because no auxiliary code
or libraries are needed, only the Python library and other system libs
2015-10-22 02:52:59 +08:00
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 >
2015-07-30 22:53:28 +08:00
< p > For libraries with provided code, the sub-directory README file
2015-10-22 02:52:59 +08:00
(e.g. lib/atc/README) has instructions on how to build that library.
2015-07-30 22:53:28 +08:00
Typically this is done by typing something like:< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > make -f Makefile.g++
< / pre > < / div >
< / div >
< p > If one of the provided Makefiles is not appropriate for your system
2014-05-30 06:52:23 +08:00
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.*
2015-07-30 22:53:28 +08:00
file.< / p >
< p > If the library build is successful, it will produce 2 files in the lib
directory:< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > < 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 be a copy of the EXTRAMAKE file setting
specified in the library Makefile.* you used.< / p >
< p > Note that you must insure that the settings in Makefile.lammps are
2014-05-30 06:52:23 +08:00
appropriate for your system. If they are not, the LAMMPS build will
2015-07-30 22:53:28 +08:00
fail.< / p >
< p > As explained in the lib/package/README files, the settings in
2014-05-30 06:52:23 +08:00
Makefile.lammps are used to specify additional system libraries and
their locations so that LAMMPS can build with the auxiliary library.
2015-10-22 02:52:59 +08:00
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
2014-05-30 06:52:23 +08:00
included in the link. Another example are the BLAS and LAPACK
2015-07-30 22:53:28 +08:00
libraries needed to use the USER-ATC or USER-AWPMD packages.< / p >
< p > For libraries without provided code, the sub-directory README file has
2015-01-09 07:53:59 +08:00
information on where to download the library and how to build it,
2015-08-11 07:47:55 +08:00
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.< / p >
2015-07-30 22:53:28 +08:00
< p > Some of the sub-directories, e.g. lib/voronoi, also have an install.py
2015-01-10 00:11:43 +08:00
script which can be used to automate the process of
downloading/building/installing the auxiliary library, and setting the
2015-07-30 22:53:28 +08:00
needed soft links. Type “ python install.py” for further instructions.< / p >
< p > As with the sub-directories containing library code, if the soft links
2015-01-10 00:11:43 +08:00
or settings in the lib/package/Makefile.lammps files are not correct,
2015-07-30 22:53:28 +08:00
the LAMMPS build will typically fail.< / p >
< hr class = "docutils" / >
< p id = "start-3-4" > < strong > *Packages that require Makefile.machine settings*< / strong > < / p >
< p > A few packages require specific settings in Makefile.machine, to
2014-10-07 23:08:33 +08:00
either build or use the package effectively. These are the
USER-INTEL, KOKKOS, USER-OMP, and OPT packages. The details of what
flags to add or what variables to define are given on the doc pages
2015-07-30 22:53:28 +08:00
that describe each of these accelerator packages in detail:< / p >
< ul class = "simple" >
< li > < a class = "reference internal" href = "accelerate_intel.html" > < em > USER-INTEL package< / em > < / a > < / li >
< li > < a class = "reference internal" href = "accelerate_kokkos.html" > < em > KOKKOS package< / em > < / a > < / li >
< li > < a class = "reference internal" href = "accelerate_omp.html" > < em > USER-OMP package< / em > < / a > < / li >
< li > < a class = "reference internal" href = "accelerate_opt.html" > < em > OPT package< / em > < / a > < / li >
< / ul >
< p > Here is a brief summary of what Makefile.machine changes are needed.
Note that the Make.py tool, described in the next < a class = "reference internal" href = "#start-4" > < span > Section 2.4< / span > < / a > can automatically add the needed info to an existing
machine Makefile, using simple command-line arguments.< / p >
< p > In src/MAKE/OPTIONS see the following Makefiles for examples of the
changes described below:< / 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 >
< / ul >
< p > For the USER-INTEL package, you have 2 choices when building. You can
2014-10-07 23:08:33 +08:00
build with CPU or Phi support. The latter uses Xeon Phi chips in
2015-07-30 22:53:28 +08:00
“ offload” mode. Each of these modes requires additional settings in
your Makefile.machine for CCFLAGS and LINKFLAGS.< / p >
< p > For CPU mode (if using an Intel compiler):< / p >
< ul class = "simple" >
< li > CCFLAGS: add -fopenmp, -DLAMMPS_MEMALIGN=64, -restrict, -xHost, -fno-alias, -ansi-alias, -override-limits< / li >
< li > LINKFLAGS: add -fopenmp< / li >
< / ul >
< p > For Phi mode add the following in addition to the CPU mode flags:< / p >
< ul class = "simple" >
< li > CCFLAGS: add -DLMP_INTEL_OFFLOAD and< / li >
< li > LINKFLAGS: add -offload< / li >
< / ul >
< p > And also add this to CCFLAGS:< / p >
< pre class = "literal-block" >
-offload-option,mic,compiler," -fp-model fast=2 -mGLOB_default_function_attrs=" gather_scatter_loop_unroll=4" "
< / pre >
< p > For the KOKKOS package, you have 3 choices when building. You can
2014-10-07 23:08:33 +08:00
build with OMP or Cuda or Phi support. Phi support uses Xeon Phi
2015-07-30 22:53:28 +08:00
chips in “ native” mode. This can be done by setting the following
variables in your Makefile.machine:< / p >
< ul class = "simple" >
< li > for OMP support, set OMP = yes< / li >
< li > for Cuda support, set OMP = yes and CUDA = yes< / li >
< li > for Phi support, set OMP = yes and MIC = yes< / li >
< / ul >
< p > These can also be set as additional arguments to the make command, e.g.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > make g++ OMP=yes MIC=yes
< / pre > < / div >
< / div >
< p > Building the KOKKOS package with CUDA support requires a Makefile
machine that uses the NVIDIA “ nvcc” compiler, as well as an
appropriate “ arch” setting appropriate to the GPU hardware and NVIDIA
2014-10-07 23:08:33 +08:00
software you have on your machine. See
src/MAKE/OPTIONS/Makefile.kokkos_cuda for an example of such a machine
2015-07-30 22:53:28 +08:00
Makefile.< / p >
< p > For the USER-OMP package, your Makefile.machine needs additional
settings for CCFLAGS and LINKFLAGS.< / p >
< ul class = "simple" >
< li > CCFLAGS: add -fopenmp and -restrict< / li >
< li > LINKFLAGS: add -fopenmp< / li >
< / ul >
< p > For the OPT package, your Makefile.machine needs an additional
settings for CCFLAGS.< / p >
< ul class = "simple" >
< li > CCFLAGS: add -restrict< / li >
< / ul >
< hr class = "docutils" / >
< / div >
2015-10-22 02:52:59 +08:00
< 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< a class = "headerlink" href = "#building-lammps-via-the-make-py-tool" title = "Permalink to this headline" > ¶< / a > < / h2 >
2015-07-30 22:53:28 +08:00
< p > The src directory includes a Make.py script, written in Python, which
2014-10-07 23:08:33 +08:00
can be used to automate various steps of the build process. It is
particularly useful for working with the accelerator packages, as well
2015-07-30 22:53:28 +08:00
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
2015-01-09 03:17:29 +08:00
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
2015-07-30 22:53:28 +08:00
(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.< / p >
< p > You can run Make.py from the src directory by typing either:< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > Make.py -h
python Make.py -h
< / pre > < / div >
< / div >
< p > which will give you help info about the tool. For the former to work,
2014-10-07 23:08:33 +08:00
you may need to edit the first line of Make.py to point to your local
2015-07-30 22:53:28 +08:00
Python. And you may need to insure the script is executable:< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > chmod +x Make.py
< / 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
2014-10-07 23:08:33 +08:00
used to build LAMMPS with the various packages and options needed to
run all the benchmark and example input scripts. See these files for
2015-07-30 22:53:28 +08:00
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 “ -h” switch.< / p >
< p > E.g. typing “ Make.py -h” gives< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > Syntax: Make.py switch args ...
2015-01-09 03:17:29 +08:00
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:
2014-10-07 23:08:33 +08:00
-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:
2015-07-30 22:53:28 +08:00
-intel, -kokkos, -cc, -mpi, -fft, -jpg, -png
< / pre > < / div >
< / div >
< p > Using the “ -h” switch with other switches and actions gives additional
info on all the other specified switches or actions. The “ -h” can be
2014-10-07 23:08:33 +08:00
anywhere in the command-line and the other switches do not need their
2015-07-30 22:53:28 +08:00
arguments. E.g. type “ Make.py -h -d -atc -intel” will print:< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -d dir
2014-10-07 23:08:33 +08:00
dir = LAMMPS home dir
2015-07-30 22:53:28 +08:00
if -d not specified, working dir must be lammps/src
< / pre > < / div >
< / div >
< div class = "highlight-python" > < div class = "highlight" > < pre > -atc make=suffix lammps=suffix2
2014-10-07 23:08:33 +08:00
all args are optional and can be in any order
make = use Makefile.suffix (def = g++)
2015-07-30 22:53:28 +08:00
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile)
< / pre > < / div >
< / div >
< div class = "highlight-python" > < div class = "highlight" > < pre > -intel mode
2014-10-07 23:08:33 +08:00
mode = cpu or phi (def = cpu)
2015-07-30 22:53:28 +08:00
build Intel package for CPU or Xeon Phi
< / pre > < / div >
< / div >
< p > Note that Make.py never overwrites an existing Makefile.machine.
2014-10-07 23:08:33 +08:00
Instead, it creates src/MAKE/MINE/Makefile.auto, which you can save or
rename if desired. Likewise it creates an executable named
2015-07-30 22:53:28 +08:00
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 “ -r” switch (for redo) to re-invoke
2014-10-07 23:08:33 +08:00
the last command, or you can save a sequence of one or more Make.py
2015-07-30 22:53:28 +08:00
commands to a file and invoke the file of commands using “ -r” . You
2014-10-07 23:08:33 +08:00
can also label the commands in the file and invoke one or more of them
2015-07-30 22:53:28 +08:00
by name.< / p >
< p > A typical use of Make.py is to start with a valid Makefile.machine for
2014-10-07 23:08:33 +08:00
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
2015-07-30 22:53:28 +08:00
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 “ -m none” switch, if you also specify what compiler
and MPI options to use, via the “ -cc” and “ -mpi” 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< a class = "headerlink" href = "#building-lammps-as-a-library" title = "Permalink to this headline" > ¶< / a > < / h2 >
< p > LAMMPS can be built as either a static or shared library, which can
2012-08-12 03:27:54 +08:00
then be called from another application or a scripting language. See
2015-07-30 22:53:28 +08:00
< a class = "reference internal" href = "Section_howto.html#howto-10" > < span > this section< / span > < / a > for more info on coupling
LAMMPS to other codes. See < a class = "reference internal" href = "Section_python.html" > < em > this section< / em > < / 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 > < a class = "headerlink" href = "#static-library" title = "Permalink to this headline" > ¶< / a > < / h3 >
< p > To build LAMMPS as a static library (< a href = "#id7" > < span class = "problematic" id = "id8" > *< / span > < / a > .a file on Linux), type< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > make foo mode=lib
< / pre > < / div >
< / div >
< p > where foo is the machine name. This kind of library is typically used
2012-08-13 22:34:09 +08:00
to statically link a driver application to LAMMPS, so that you can
2015-03-11 23:27:19 +08:00
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
2015-07-30 22:53:28 +08:00
point to the most recently built static library.< / p >
< / div >
< div class = "section" id = "shared-library" >
< h3 > 2.5.2. < strong > Shared library:< / strong > < a class = "headerlink" href = "#shared-library" title = "Permalink to this headline" > ¶< / a > < / h3 >
< p > To build LAMMPS as a shared library (< a href = "#id9" > < span class = "problematic" id = "id10" > *< / span > < / a > .so file on Linux), which can be
dynamically loaded, e.g. from Python, type< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > make foo mode=shlib
< / 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" > < em > Section_python< / em > < / a >
2015-03-11 23:27:19 +08:00
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
2015-07-30 22:53:28 +08:00
the file the Python wrapper loads by default.< / p >
< p > Note that for a shared library to be usable by a calling program, all
2012-08-12 03:27:54 +08:00
the auxiliary libraries it depends on must also exist as shared
2012-08-15 00:13:24 +08:00
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
2015-03-11 23:27:19 +08:00
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
2015-07-30 22:53:28 +08:00
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-python" > < div class = "highlight" > < pre > /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
2015-03-12 22:25:00 +08:00
object; recompile with -fPIC
2015-07-30 22:53:28 +08:00
/usr/local/lib/libfftw3.a: could not read symbols: Bad value
< / pre > < / div >
< / div >
< div class = "highlight-python" > < div class = "highlight" > < pre > /usr/bin/ld: ../../lib/colvars/libcolvars.a(colvarmodule.o):
relocation R_X86_64_32 against `__pthread_key_create' can not be used
2015-03-12 22:25:00 +08:00
when making a shared object; recompile with -fPIC
2015-07-30 22:53:28 +08:00
../../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
2012-08-13 22:34:09 +08:00
Argonne National Labs, as a shared library in the default
2015-07-30 22:53:28 +08:00
/usr/local/lib location:< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > ./configure --enable-shared
2012-08-13 22:34:09 +08:00
make
2015-07-30 22:53:28 +08:00
make install
< / pre > < / div >
< / div >
< p > You may need to use “ sudo make install” in place of the last line if
2012-08-14 01:01:35 +08:00
you do not have write privileges for /usr/local/lib. The end result
2015-07-30 22:53:28 +08:00
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 > < a class = "headerlink" href = "#additional-requirement-for-using-a-shared-library" title = "Permalink to this headline" > ¶< / a > < / h3 >
< p > The operating system finds shared libraries to load at run-time using
2012-08-15 04:13:16 +08:00
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
2012-08-16 06:59:37 +08:00
wish to add the LAMMPS src directory to LD_LIBRARY_PATH, so that the
2012-08-15 07:16:29 +08:00
current version of the shared library is always available to programs
2015-07-30 22:53:28 +08:00
that use it.< / p >
< p > For the csh or tcsh shells, you would add something like this to your
~/.cshrc file:< / p >
2015-08-01 07:59:29 +08:00
< div class = "highlight-python" > < div class = "highlight" > < pre > setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/src
2015-07-30 22:53:28 +08:00
< / pre > < / div >
< / div >
< / div >
< div class = "section" id = "calling-the-lammps-library" >
< h3 > 2.5.4. < strong > Calling the LAMMPS library:< / strong > < a class = "headerlink" href = "#calling-the-lammps-library" title = "Permalink to this headline" > ¶< / a > < / h3 >
2015-08-01 07:59:29 +08:00
< p > Either flavor of library (static or shared) allows one or more LAMMPS
2015-07-30 22:53:28 +08:00
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
2007-02-10 05:37:30 +08:00
namespace; you can safely use any of its classes and methods from
2015-07-30 22:53:28 +08:00
within the calling code, as needed.< / p >
< p > When used from a C or Fortran program or a scripting language like
2012-08-12 03:27:54 +08:00
Python, the library has a simple function-style interface, provided in
2015-07-30 22:53:28 +08:00
src/library.cpp and src/library.h.< / p >
< p > See the sample codes in examples/COUPLE/simple for examples of C++ and
2012-08-14 01:01:35 +08:00
C and Fortran codes that invoke LAMMPS thru its library interface.
There are other examples as well in the COUPLE directory which are
2015-07-30 22:53:28 +08:00
discussed in < a class = "reference internal" href = "Section_howto.html#howto-10" > < span > Section_howto 10< / span > < / a > of the
manual. See < a class = "reference internal" href = "Section_python.html" > < em > Section_python< / em > < / a > of the manual for a
2012-08-14 01:01:35 +08:00
description of the Python wrapper provided with LAMMPS that operates
2015-07-30 22:53:28 +08:00
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 > 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< a class = "headerlink" href = "#running-lammps" title = "Permalink to this headline" > ¶< / a > < / 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-python" > < div class = "highlight" > < pre > < span class = "n" > lmp_linux< / span >
< / pre > < / div >
< / div >
< p > it will simply wait, expecting commands from the keyboard. Typically
2014-02-06 02:09:51 +08:00
you should put commands in an input script and use I/O redirection,
2015-07-30 22:53:28 +08:00
e.g.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > lmp_linux < in.file
< / pre > < / div >
< / div >
< p > For parallel environments this should also work. If it does not, use
the ‘ -in’ command-line switch, e.g.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > lmp_linux -in in.file
< / pre > < / div >
< / div >
< p > < a class = "reference internal" href = "Section_commands.html" > < em > This section< / em > < / 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
2011-02-11 23:28:32 +08:00
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
2015-07-30 22:53:28 +08:00
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-python" > < div class = "highlight" > < pre > cd src
2006-09-22 00:22:34 +08:00
make linux
2011-02-11 23:28:32 +08:00
cp lmp_linux ../bench
cd ../bench
2015-08-22 06:51:32 +08:00
mpirun -np 4 lmp_linux -in in.lj
2015-07-30 22:53:28 +08:00
< / 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
2014-02-06 02:09:51 +08:00
various platforms. Note that some of the example scripts require
2015-07-30 22:53:28 +08:00
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
2011-08-19 01:31:58 +08:00
executable, as described above, though the pre-packaged executables
2015-07-30 22:53:28 +08:00
include only certain packages.< / p >
< p > To run a LAMMPS executable on a Windows machine, first decide whether
2011-06-14 08:33:26 +08:00
you want to download the non-MPI (serial) or the MPI (parallel)
version of the executable. Download and save the version you have
2015-07-30 22:53:28 +08:00
chosen.< / p >
< p > For the non-MPI version, follow these steps:< / p >
< ul class = "simple" >
< li > Get a command prompt by going to Start-> Run... ,
then typing “ cmd” .< / li >
< li > Move to the directory where you have saved lmp_win_no-mpi.exe
(e.g. by typing: cd “ Documents” ).< / li >
< li > At the command prompt, type “ lmp_win_no-mpi -in in.lj” , 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’ ll need to use the mpiexec.exe and smpd.exe files from the MPICH2
2014-02-06 02:09:51 +08:00
package. Put them in same directory (or path) as the LAMMPS Windows
2015-07-30 22:53:28 +08:00
executable.< / li >
< li > Get a command prompt by going to Start-> Run... ,
then typing “ cmd” .< / li >
< li > Move to the directory where you have saved lmp_win_mpi.exe
(e.g. by typing: cd “ Documents” ).< / li >
< li > 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.< / li >
< li > Note that you may need to provide smpd with a passphrase (it doesn’ t
matter what you type).< / li >
< li > In this mode, output may not immediately show up on the screen, so if
2014-02-06 02:09:51 +08:00
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
2015-07-30 22:53:28 +08:00
like: “ lmp_win_mpi -in in.lj” .< / li >
< / ul >
< hr class = "docutils" / >
< p > The screen output from LAMMPS is described in the next section. 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
2007-04-02 22:26:01 +08:00
(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
2007-05-01 08:14:45 +08:00
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
2015-07-30 22:53:28 +08:00
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
2006-09-22 00:22:34 +08:00
simulation it will print an ERROR message and stop or a WARNING
2015-07-30 22:53:28 +08:00
message and continue. See < a class = "reference internal" href = "Section_errors.html" > < em > Section_errors< / em > < / a > 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.< / p >
< p > LAMMPS can run a problem on any number of processors, including a
2006-09-22 00:22:34 +08:00
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
2015-07-30 22:53:28 +08:00
molecular dynamics phase space trajectories.< / p >
< p > LAMMPS can run as large a problem as will fit in the physical memory
2006-09-22 00:22:34 +08:00
of one or more processors. If you run out of memory, you must run on
2015-07-30 22:53:28 +08:00
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< a class = "headerlink" href = "#command-line-options" title = "Permalink to this headline" > ¶< / a > < / h2 >
< p > At run time, LAMMPS recognizes several optional command-line switches
2011-08-19 01:31:58 +08:00
which may be used in any order. Either the full word or a one-or-two
2015-07-30 22:53:28 +08:00
letter abbreviation can be used:< / p >
< ul class = "simple" >
< li > -c or -cuda< / li >
< 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 >
2015-08-22 06:51:32 +08:00
< div class = "highlight-python" > < div class = "highlight" > < pre > 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
2015-07-30 22:53:28 +08:00
< / pre > < / div >
< / div >
< p > Here are the details on the options:< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -cuda on/off
< / pre > < / div >
< / div >
< p > Explicitly enable or disable CUDA support, as provided by the
2014-06-04 23:49:05 +08:00
USER-CUDA package. Even if LAMMPS is built with this package, as
2015-07-30 22:53:28 +08:00
described above in < a class = "reference internal" href = "#start-3" > < span > Section 2.3< / span > < / a > , this switch must be set to
2014-06-05 05:27:34 +08:00
enable running with the CUDA-enabled styles the package provides. If
2014-06-04 23:49:05 +08:00
the switch is not set (the default), LAMMPS will operate as if the
USER-CUDA package were not installed; i.e. you can run standard LAMMPS
2015-07-30 22:53:28 +08:00
or with the GPU package, for testing or benchmarking purposes.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -echo style
< / 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
2006-09-22 00:22:34 +08:00
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
2015-07-30 22:53:28 +08:00
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" > < em > echo< / em > < / a > command in the input script itself.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > < 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
2014-09-11 03:58:46 +08:00
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
2015-07-30 22:53:28 +08:00
used.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -in file
< / pre > < / div >
< / div >
< p > Specify a file to use as an input script. This is an optional switch
2011-05-27 06:35:54 +08:00
when running LAMMPS in one-partition mode. If it is not specified,
2014-02-06 02:09:51 +08:00
LAMMPS reads its script from standard input, typically from a script
2015-07-30 22:53:28 +08:00
via I/O redirection; e.g. lmp_linux < in.run. I/O redirection should
2014-02-06 02:09:51 +08:00
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
2015-07-30 22:53:28 +08:00
stdin.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -kokkos on/off keyword/value ...
< / pre > < / div >
< / div >
< p > Explicitly enable or disable KOKKOS support, as provided by the KOKKOS
2014-06-04 23:49:05 +08:00
package. Even if LAMMPS is built with this package, as described
2015-07-30 22:53:28 +08:00
above in < a class = "reference internal" href = "#start-3" > < span > Section 2.3< / span > < / a > , this switch must be set to enable
2014-06-05 05:27:34 +08:00
running with the KOKKOS-enabled styles the package provides. If the
2014-06-04 23:49:05 +08:00
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-CUDA or USER-OMP packages, for testing or benchmarking
2015-07-30 22:53:28 +08:00
purposes.< / p >
< p > Additional optional keyword/value pairs can be specified which
2014-05-30 06:52:23 +08:00
determine how Kokkos will use the underlying hardware on your
platform. These settings apply to each MPI task you launch via the
2015-07-30 22:53:28 +08:00
“ mpirun” or “ mpiexec” command. You may choose to run one or more MPI
2014-05-30 06:52:23 +08:00
tasks per physical node. Note that if you are running on a desktop
machine, you typically have one physical node. On a cluster or
2015-07-30 22:53:28 +08:00
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.
2014-05-30 06:52:23 +08:00
Note that the keywords do not use a leading minus sign. I.e. the
2015-07-30 22:53:28 +08:00
keyword is “ t” , not “ -t” . Also note that each of the keywords has a
2014-09-04 23:42:04 +08:00
default setting. Example of when to use these options and what
2015-07-30 22:53:28 +08:00
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-python" > < div class = "highlight" > < pre > device Nd
< / pre > < / div >
< / div >
< p > This option is only relevant if you built LAMMPS with CUDA=yes, you
2014-05-30 06:52:23 +08:00
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
2015-07-30 22:53:28 +08:00
MPI task per node, and assign each job to run on a different GPU.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > gpus Ng Ns
< / pre > < / div >
< / div >
< p > This option is only relevant if you built LAMMPS with CUDA=yes, you
2014-05-30 06:52:23 +08:00
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
2015-07-30 22:53:28 +08:00
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-python" > < div class = "highlight" > < pre > SLURM_LOCALID (various MPI variants compiled with SLURM support)
2014-05-30 06:52:23 +08:00
MV2_COMM_WORLD_LOCAL_RANK (Mvapich)
2015-07-30 22:53:28 +08:00
OMPI_COMM_WORLD_LOCAL_RANK (OpenMPI)
< / pre > < / div >
< / div >
< p > which are initialized by the “ srun” , “ mpirun” or “ mpiexec” commands.
2014-05-30 07:07:14 +08:00
The environment variable setting for each MPI rank is used to assign a
2015-07-30 22:53:28 +08:00
unique GPU ID to the MPI task.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > threads Nt
< / pre > < / div >
< / div >
< p > This option assigns Nt number of threads to each MPI task for
2014-05-30 06:52:23 +08:00
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
2014-05-30 07:07:14 +08:00
optimally. This also sets the number of threads used by the host when
2015-07-30 22:53:28 +08:00
LAMMPS is compiled with CUDA=yes.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > numa Nm
< / pre > < / div >
< / div >
< p > This option is only relevant when using pthreads with hwloc support.
2014-05-30 07:07:14 +08:00
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
2015-07-30 22:53:28 +08:00
traffic which is slow.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -log file
< / pre > < / div >
< / div >
< p > Specify a log file for LAMMPS to write status information to. In
2011-05-27 06:35:54 +08:00
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
2015-07-30 22:53:28 +08:00
logfile is named “ file” and each partition also logs information to a
2011-05-27 06:35:54 +08:00
file.N. For both one-partition and multi-partition mode, if the
2015-07-30 22:53:28 +08:00
specified file is “ none” , then no log files are created. Using a
< a class = "reference internal" href = "log.html" > < em > log< / em > < / 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-python" > < div class = "highlight" > < pre > < 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
2013-07-31 05:03:20 +08:00
references for specific cite-able features used during a LAMMPS run.
2015-07-30 22:53:28 +08:00
See the < a class = "reference external" href = "http://lammps.sandia.gov/cite.html" > citation page< / a > for more
details.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -package style args ....
< / pre > < / div >
< / div >
< p > Invoke the < a class = "reference internal" href = "package.html" > < em > package< / em > < / a > command with style and args. The
2014-09-11 03:58:46 +08:00
syntax is the same as if the command appeared at the top of the input
2015-07-30 22:53:28 +08:00
script. For example “ -package gpu 2” or “ -pk gpu 2” is the same as
< a class = "reference internal" href = "package.html" > < em > package gpu 2< / em > < / a > in the input script. The possible styles
and args are documented on the < a class = "reference internal" href = "package.html" > < em > package< / em > < / a > doc page. This
2014-09-11 03:58:46 +08:00
switch can be used multiple times, e.g. to set options for the
2015-07-30 22:53:28 +08:00
USER-INTEL and USER-OMP packages which can be used together.< / p >
< p > Along with the “ -suffix” command-line switch, this is a convenient
2014-09-11 03:58:46 +08:00
mechanism for invoking accelerator packages and their options without
2015-07-30 22:53:28 +08:00
having to edit an input script.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -partition 8x2 4 5 ...
< / pre > < / div >
< / div >
< p > Invoke LAMMPS in multi-partition mode. When LAMMPS is run on P
2006-09-22 00:22:34 +08:00
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
2015-07-30 22:53:28 +08:00
“ -partition 8x2 4 5” 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 > multi-replica simulations< / span > < / a > , where each
2011-12-09 06:50:07 +08:00
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
2015-07-30 22:53:28 +08:00
(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 > Section_howto 4< / span > < / a >
of the manual. World- and universe-style < a class = "reference internal" href = "variable.html" > < em > variables< / em > < / a >
are useful in this context.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -plog file
< / pre > < / div >
< / div >
< p > Specify the base name for the partition log files, so partition N
2011-12-09 06:50:07 +08:00
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
2015-07-30 22:53:28 +08:00
command-line option.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -pscreen file
< / pre > < / div >
< / div >
< p > Specify the base name for the partition screen file, so partition N
2011-12-09 06:50:07 +08:00
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
2011-12-13 23:58:47 +08:00
sub-directory (-pscreen replica_files/screen). If this option is not
2011-12-09 06:50:07 +08:00
used the screen file for partition N is screen.N or whatever is
2015-07-30 22:53:28 +08:00
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
2013-11-23 01:34:49 +08:00
is the same operation as if the following 2-line input script were
2015-07-30 22:53:28 +08:00
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 (“ *” ,%” ) as described by the
< a class = "reference internal" href = "read_restart.html" > < em > read_restart< / em > < / a > and < a class = "reference internal" href = "write_data.html" > < em > write_data< / em > < / a >
2013-11-23 01:34:49 +08:00
commands. But a filename such as file.* will need to be enclosed in
2015-07-30 22:53:28 +08:00
quotes to avoid shell expansion of the “ *” character.< / p >
< p > Note that following restartfile, the optional flag < em > remap< / em > can be
2014-06-15 05:36:31 +08:00
used. This has the same effect as adding it to the
2015-07-30 22:53:28 +08:00
< a class = "reference internal" href = "read_restart.html" > < em > read_restart< / em > < / a > command, as explained on its doc
2014-06-15 05:36:31 +08:00
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
2015-07-30 22:53:28 +08:00
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" > < em > write_data< / em > < / a >
command.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -reorder nth N
-reorder custom filename
< / pre > < / div >
< / div >
< p > Reorder the processors in the MPI communicator used to instantiate
2011-12-13 23:58:47 +08:00
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
2015-07-30 22:53:28 +08:00
the < a class = "reference internal" href = "run_style.html" > < em > run_style verlet/split< / em > < / a > command with 2 partitions
2011-12-13 23:58:47 +08:00
to insure that a specific Kspace processor (in the 2nd partition) is
matched up with a specific set of processors in the 1st partition.
2015-07-30 22:53:28 +08:00
See the < a class = "reference internal" href = "Section_accelerate.html" > < em > Section_accelerate< / em > < / 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
2011-12-13 23:58:47 +08:00
Nth processor will be moved to the end of the ranking. This is useful
2015-07-30 22:53:28 +08:00
when using the < a class = "reference internal" href = "run_style.html" > < em > run_style verlet/split< / em > < / a > command with 2
2011-12-13 23:58:47 +08:00
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.
2015-07-30 22:53:28 +08:00
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< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > 0 1 2 3 4 5 6 7 8 9 10 11
< / pre > < / div >
< / div >
< p > to< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > 0 1 2 4 5 6 8 9 10 3 7 11
< / pre > < / div >
< / div >
< p > so that the processors in each partition will be< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > 0 1 2 4 5 6 8 9 10
3 7 11
< / pre > < / div >
< / div >
< p > See the “ processors” 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
2011-12-13 23:58:47 +08:00
of the processor ranks is also specified. The format of the reorder
file is as follows. Any number of initial blank or comment lines
2015-07-30 22:53:28 +08:00
(starting with a “ #” character) can be present. These should be
followed by P lines of the form:< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > I J
< / pre > < / div >
< / div >
< p > where P is the number of processors LAMMPS was launched with. Note
2011-12-13 23:58:47 +08:00
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
2015-07-30 22:53:28 +08:00
reordered communicator.< / p >
< p > Note that rank ordering can also be specified by many MPI
2011-12-13 23:58:47 +08:00
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
2015-07-30 22:53:28 +08:00
itself. See the < a class = "reference external" href = "processors" > processors out< / a > command for how to output
2011-12-13 23:58:47 +08:00
info on the final assignment of physical processors to the LAMMPS
2015-07-30 22:53:28 +08:00
simulation domain.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -screen file
< / pre > < / div >
< / div >
< p > Specify a file for LAMMPS to write its screen information to. In
2006-09-22 00:22:34 +08:00
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,
2015-07-30 22:53:28 +08:00
the hi-level screen dump is named “ file” and each partition also
2006-09-22 00:22:34 +08:00
writes screen information to a file.N. For both one-partition and
2015-07-30 22:53:28 +08:00
multi-partition mode, if the specified file is “ none” , then no screen
2011-12-09 06:50:07 +08:00
output is performed. Option -pscreen will override the name of the
2015-07-30 22:53:28 +08:00
partition screen files file.N.< / p >
2015-10-05 23:19:04 +08:00
< div class = "highlight-python" > < div class = "highlight" > < pre > -suffix style args
2015-07-30 22:53:28 +08:00
< / pre > < / div >
< / div >
< p > Use variants of various styles if they exist. The specified style can
2015-10-05 23:19:04 +08:00
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
2015-07-30 22:53:28 +08:00
< a class = "reference internal" href = "#start-3" > < span > Section 2.3< / span > < / a > . The “ cuda” style corresponds to the USER-CUDA
package, the “ gpu” style to the GPU package, the “ intel” style to the
USER-INTEL package, the “ kk” style to the KOKKOS package, the “ opt”
2015-10-05 23:19:04 +08:00
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.< / p >
2015-07-30 22:53:28 +08:00
< p > Along with the “ -package” command-line switch, this is a convenient
2014-09-11 03:58:46 +08:00
mechanism for invoking accelerator packages and their options without
2015-07-30 22:53:28 +08:00
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" > < em > pair_style lj/cut< / em > < / a > variant, with style names lj/cut/cuda,
2014-09-11 03:58:46 +08:00
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 (cuda,gpu,intel,kk,omp,opt) is automatically appended
whenever your input script command creates a new
2015-07-30 22:53:28 +08:00
< a class = "reference internal" href = "atom_style.html" > < em > atom< / em > < / a > , < a class = "reference internal" href = "pair_style.html" > < em > pair< / em > < / a > , < a class = "reference internal" href = "fix.html" > < em > fix< / em > < / a > ,
< a class = "reference internal" href = "compute.html" > < em > compute< / em > < / a > , or < a class = "reference internal" href = "run_style.html" > < em > run< / em > < / 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 “ package gpu 1” were used at
2014-09-11 03:58:46 +08:00
the top of your input script. These settings can be changed by using
2015-07-30 22:53:28 +08:00
the “ -package gpu” command-line switch or the < a class = "reference internal" href = "package.html" > < em > package gpu< / em > < / 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 “ 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
2015-10-05 23:19:04 +08:00
the < a class = "reference internal" href = "package.html" > < em > package intel< / em > < / a > 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
< a class = "reference internal" href = "package.html" > < em > package omp< / em > < / a > command in your script.< / p >
2015-07-30 22:53:28 +08:00
< p > For the KOKKOS package, using this command-line switch also invokes
the default KOKKOS settings, as if the command “ package kokkos” were
2014-09-11 03:58:46 +08:00
used at the top of your input script. These settings can be changed
2015-07-30 22:53:28 +08:00
by using the “ -package kokkos” command-line switch or the < a class = "reference internal" href = "package.html" > < em > package kokkos< / em > < / 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 “ package omp 0” were used at
2011-12-02 23:47:30 +08:00
the top of your input script. These settings can be changed by using
2015-07-30 22:53:28 +08:00
the “ -package omp” command-line switch or the < a class = "reference internal" href = "package.html" > < em > package omp< / em > < / a > command in your script.< / p >
< p > The < a class = "reference internal" href = "suffix.html" > < em > suffix< / em > < / a > command can also be used within an input
2014-09-11 03:58:46 +08:00
script to set a suffix, or to turn off or back on any suffix setting
2015-07-30 22:53:28 +08:00
made via the command line.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > -var name value1 value2 ...
< / pre > < / div >
< / div >
< p > Specify a variable that will be defined for substitution purposes when
2014-09-11 03:58:46 +08:00
the input script is read. This switch can be used multiple times to
2015-07-30 22:53:28 +08:00
define multiple variables. “ Name” is the variable name which can be a
2006-09-22 00:22:34 +08:00
single character (referenced as $x in the input script) or a full
2015-07-30 22:53:28 +08:00
string (referenced as ${abc}). An < a class = "reference internal" href = "variable.html" > < em > index-style variable< / em > < / a > will be created and populated with the
2011-02-05 03:13:00 +08:00
subsequent values, e.g. a set of filenames. Using this command-line
2015-07-30 22:53:28 +08:00
option is equivalent to putting the line “ variable name index value1
value2 ...” at the beginning of the input script. Defining an index
2011-02-05 03:13:00 +08:00
variable as a command-line argument overrides any setting for the same
index variable in the input script, since index variables cannot be
2015-07-30 22:53:28 +08:00
re-defined. See the < a class = "reference internal" href = "variable.html" > < em > variable< / em > < / 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 > 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 “ -” to indicate new switches. Thus you cannot specify
multiple variable values if any of they start with a “ -” , e.g. a
2011-10-10 23:01:46 +08:00
negative numeric value. It is OK if the first value1 starts with a
2015-07-30 22:53:28 +08:00
“ -” , 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< a class = "headerlink" href = "#lammps-screen-output" title = "Permalink to this headline" > ¶< / a > < / h2 >
< p > As LAMMPS reads an input script, it prints information to both the
2006-09-22 00:22:34 +08:00
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
2015-07-30 22:53:28 +08:00
simulation. An example set of statistics is shown here:< / p >
2015-08-29 08:13:46 +08:00
< p > Loop time of 2.81192 on 4 procs for 300 steps with 2004 atoms< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > Performance: 18.436 ns/day 1.302 hours/ns 106.689 timesteps/s
2015-08-29 04:40:16 +08:00
97.0% CPU use with 4 MPI tasks x no OpenMP threads
2015-07-30 22:53:28 +08:00
< / pre > < / div >
< / div >
2015-08-29 04:40:16 +08:00
< div class = "highlight-python" > < div class = "highlight" > < 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
2015-07-30 22:53:28 +08:00
< / pre > < / div >
< / div >
2015-08-29 04:40:16 +08:00
< div class = "highlight-python" > < div class = "highlight" > < 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
2015-07-30 22:53:28 +08:00
< / pre > < / div >
< / div >
2015-08-29 04:40:16 +08:00
< div class = "highlight-python" > < div class = "highlight" > < pre > Total # of neighbors = 708028
Ave neighs/atom = 353.307
2006-09-22 00:22:34 +08:00
Ave special neighs/atom = 2.34032
2015-08-29 04:40:16 +08:00
Neighbor list builds = 26
Dangerous builds = 0
2015-07-30 22:53:28 +08:00
< / pre > < / div >
< / div >
2015-08-29 04:40:16 +08:00
< p > The first section provides a global loop timing summary. The loop time
2015-08-29 08:13:46 +08:00
is the total wall time for the section. The < em > Performance< / em > line is
2015-08-29 04:40:16 +08:00
provided for convenience to help predicting the number of loop
2015-08-29 08:13:46 +08:00
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 >
2015-08-29 04:40:16 +08:00
< 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 >
2015-08-30 05:58:24 +08:00
< p > When using the < a class = "reference internal" href = "timer.html" > < em > timer full< / em > < / a > setting, an additional column
2015-08-29 08:13:46 +08:00
is present that also prints the CPU utilization in percent. In
2015-08-30 05:58:24 +08:00
addition, when using < em > timer full< / em > and the < a class = "reference internal" href = "package.html" > < em > package omp< / em > < / a >
2015-08-29 08:13:46 +08:00
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 >
2015-08-29 04:40:16 +08:00
< p > Thread timings breakdown (MPI rank 0):
Total threaded time 0.6846 / 90.6%
Section | min time | avg time | max time < a href = "#id17" > < span class = "problematic" id = "id18" > |%varavg|< / span > < / a > %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< / p >
< 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 >
2015-07-30 22:53:28 +08:00
< p > The last section gives aggregate statistics for pair-wise neighbors
2006-09-22 00:22:34 +08:00
and special neighbors that LAMMPS keeps track of (see the
2015-07-30 22:53:28 +08:00
< a class = "reference internal" href = "special_bonds.html" > < em > special_bonds< / em > < / a > command). The number of times
2006-09-22 00:22:34 +08:00
neighbor lists were rebuilt during the run is given as well as the
2015-07-30 22:53:28 +08:00
number of potentially “ dangerous” rebuilds. If atom movement
2006-09-22 00:22:34 +08:00
triggered neighbor list rebuilding (see the
2015-07-30 22:53:28 +08:00
< a class = "reference internal" href = "neigh_modify.html" > < em > neigh_modify< / em > < / a > command), then dangerous
2006-09-22 00:22:34 +08:00
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
2015-07-30 22:53:28 +08:00
takes place.< / p >
< p > If an energy minimization was performed via the
< a class = "reference internal" href = "minimize.html" > < em > minimize< / em > < / a > command, additional information is printed,
e.g.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > Minimization stats:
2015-08-29 04:40:16 +08:00
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
2015-07-30 22:53:28 +08:00
< / pre > < / div >
< / div >
2015-08-29 04:40:16 +08:00
< 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 “ 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.< / p >
2015-07-30 22:53:28 +08:00
< p > If a < a class = "reference internal" href = "kspace_style.html" > < em > kspace_style< / em > < / a > long-range Coulombics solve was
2006-09-22 00:22:34 +08:00
performed during the run (PPPM, Ewald), then additional information is
2015-07-30 22:53:28 +08:00
printed, e.g.< / p >
< div class = "highlight-python" > < div class = "highlight" > < pre > FFT time (% of Kspce) = 0.200313 (8.34477)
FFT Gflps 3d 1d-only = 2.31074 9.19989
< / pre > < / div >
< / div >
< p > The first line gives the time spent doing 3d FFTs (4 per timestep) and
2006-09-22 00:22:34 +08:00
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
2015-07-30 22:53:28 +08:00
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< a class = "headerlink" href = "#tips-for-users-of-previous-lammps-versions" title = "Permalink to this headline" > ¶< / a > < / h2 >
< p > The current C++ began with a complete rewrite of LAMMPS 2001, which
2009-08-13 00:45:55 +08:00
was written in F90. Features of earlier versions of LAMMPS are listed
2015-07-30 22:53:28 +08:00
in < a class = "reference internal" href = "Section_history.html" > < em > Section_history< / em > < / a > . The F90 and F77 versions
2009-08-13 00:45:55 +08:00
(2001 and 99) are also freely distributed as open-source codes; check
2015-07-30 22:53:28 +08:00
the < a class = "reference external" href = "http://lammps.sandia.gov" > LAMMPS WWW Site< / a > for distribution information if you prefer
2009-08-13 00:45:55 +08:00
those versions. The 99 and 2001 versions are no longer under active
2015-07-30 22:53:28 +08:00
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
2006-09-22 00:22:34 +08:00
changed. All commands are now a single word (e.g. read_data instead
2015-07-30 22:53:28 +08:00
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" > < em > read_data< / em > < / a > command for details. The data file
section “ Nonbond Coeff” has been renamed to “ Pair Coeff” 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" > < em > read_restart< / em > < / a > command. This is
2006-09-22 00:22:34 +08:00
because they were output by F90 which writes in a different binary
2015-07-30 22:53:28 +08:00
format than C or C++ writes or reads. Use the < em > restart2data< / em > tool
2006-09-22 00:22:34 +08:00
provided with LAMMPS 2001 to convert the 2001 restart file to a text
2009-08-13 00:45:55 +08:00
data file. Then edit the data file as necessary before using the C++
2015-07-30 22:53:28 +08:00
LAMMPS < a class = "reference internal" href = "read_data.html" > < em > read_data< / em > < / a > command to read it in.< / p >
< p > (5) There are numerous small numerical changes in C++ LAMMPS that mean
2009-08-13 00:45:55 +08:00
you will not get identical answers when comparing to a 2001 run.
2006-09-22 00:22:34 +08:00
However, your initial thermodynamic energy and MD trajectory should be
2015-07-30 22:53:28 +08:00
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 >
2015-12-11 01:23:56 +08:00
© Copyright 2013 Sandia Corporation.
2015-07-30 22:53:28 +08:00
< / 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:'./',
2015-12-20 02:42:24 +08:00
VERSION:'17 Dec 2015',
2015-07-30 22:53:28 +08:00
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 >