Merge pull request #1888 from lammps/release-preparation
Documentation and Build script and Info updates for stable release
@ -36,7 +36,6 @@ get_lammps_version(${LAMMPS_SOURCE_DIR}/version.h LAMMPS_VERSION)
|
||||
include(PreventInSourceBuilds)
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS)
|
||||
#release comes with -O3 by default
|
||||
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
||||
endif(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS)
|
||||
string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE)
|
||||
@ -420,7 +419,7 @@ endforeach()
|
||||
##############################################
|
||||
# add lib sources of (simple) enabled packages
|
||||
############################################
|
||||
foreach(SIMPLE_LIB POEMS USER-ATC USER-AWPMD USER-H5MD USER-QMMM)
|
||||
foreach(SIMPLE_LIB POEMS USER-ATC USER-AWPMD USER-H5MD)
|
||||
if(PKG_${SIMPLE_LIB})
|
||||
string(REGEX REPLACE "^USER-" "" PKG_LIB "${SIMPLE_LIB}")
|
||||
string(TOLOWER "${PKG_LIB}" PKG_LIB)
|
||||
@ -682,7 +681,7 @@ endforeach()
|
||||
|
||||
get_directory_property(CPPFLAGS DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS)
|
||||
include(FeatureSummary)
|
||||
feature_summary(DESCRIPTION "The following packages have been found:" WHAT PACKAGES_FOUND)
|
||||
feature_summary(DESCRIPTION "The following tools and libraries have been found and configured:" WHAT PACKAGES_FOUND)
|
||||
message(STATUS "<<< Build configuration >>>
|
||||
Build type ${CMAKE_BUILD_TYPE}
|
||||
Install path ${CMAKE_INSTALL_PREFIX}
|
||||
@ -702,7 +701,7 @@ if (${_index} GREATER -1)
|
||||
endif()
|
||||
list (FIND LANGUAGES "C" _index)
|
||||
if (${_index} GREATER -1)
|
||||
message(STATUS "C Compiler ${CMAKE_C_COMPILER}
|
||||
message(STATUS "C compiler ${CMAKE_C_COMPILER}
|
||||
Type ${CMAKE_C_COMPILER_ID}
|
||||
Version ${CMAKE_C_COMPILER_VERSION}
|
||||
C Flags ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BTYPE}}")
|
||||
@ -712,22 +711,22 @@ if(CMAKE_EXE_LINKER_FLAGS)
|
||||
Executable ${CMAKE_EXE_LINKER_FLAGS}")
|
||||
endif()
|
||||
if(BUILD_SHARED_LIBS)
|
||||
message(STATUS "Shared libraries ${CMAKE_SHARED_LINKER_FLAGS}")
|
||||
message(STATUS "Shared library flags: ${CMAKE_SHARED_LINKER_FLAGS}")
|
||||
else()
|
||||
message(STATUS "Static libraries ${CMAKE_STATIC_LINKER_FLAGS}")
|
||||
message(STATUS "Static library flags: ${CMAKE_STATIC_LINKER_FLAGS}")
|
||||
endif()
|
||||
message(STATUS "Link libraries: ${LAMMPS_LINK_LIBS}")
|
||||
if(BUILD_MPI)
|
||||
message(STATUS "Using mpi with headers in ${MPI_CXX_INCLUDE_PATH} and ${MPI_CXX_LIBRARIES}")
|
||||
message(STATUS "Using MPI with headers in ${MPI_CXX_INCLUDE_PATH} and ${MPI_CXX_LIBRARIES}")
|
||||
endif()
|
||||
if(PKG_GPU)
|
||||
message(STATUS "GPU Api: ${GPU_API}")
|
||||
message(STATUS "GPU API: ${GPU_API}")
|
||||
if(GPU_API STREQUAL "CUDA")
|
||||
message(STATUS "GPU Arch: ${GPU_ARCH}")
|
||||
message(STATUS "GPU architecture: ${GPU_ARCH}")
|
||||
elseif(GPU_API STREQUAL "OPENCL")
|
||||
message(STATUS "OCL Tune: ${OCL_TUNE}")
|
||||
message(STATUS "OpenCL parameter tuning: ${OCL_TUNE}")
|
||||
endif()
|
||||
message(STATUS "GPU Precision: ${GPU_PREC}")
|
||||
message(STATUS "GPU precision: ${GPU_PREC}")
|
||||
endif()
|
||||
if(PKG_KOKKOS)
|
||||
message(STATUS "Kokkos Arch: ${KOKKOS_ARCH}")
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
# - Find quantum-espresso
|
||||
# Find the native QE headers and libraries.
|
||||
#
|
||||
# QE_INCLUDE_DIRS - where to find quantum-espresso.h, etc.
|
||||
# QE_LIBRARIES - List of libraries when using quantum-espresso.
|
||||
# QE_FOUND - True if quantum-espresso found.
|
||||
#
|
||||
|
||||
find_path(QE_INCLUDE_DIR libqecouple.h PATH_SUFFIXES COUPLE/include)
|
||||
|
||||
find_library(QECOUPLE_LIBRARY NAMES qecouple)
|
||||
find_library(PW_LIBRARY NAMES pw)
|
||||
find_library(QEMOD_LIBRARY NAMES qemod)
|
||||
find_library(QEFFT_LIBRARY NAMES qefft)
|
||||
find_library(QELA_LIBRARY NAMES qela)
|
||||
find_library(CLIB_LIBRARY NAMES clib)
|
||||
find_library(IOTK_LIBRARY NAMES iotk)
|
||||
|
||||
|
||||
set(QE_LIBRARIES ${QECOUPLE_LIBRARY} ${PW_LIBRARY} ${QEMOD_LIBRARY} ${QEFFT_LIBRARY} ${QELA_LIBRARY} ${CLIB_LIBRARY} ${IOTK_LIBRARY})
|
||||
set(QE_INCLUDE_DIRS ${QE_INCLUDE_DIR})
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
# handle the QUIETLY and REQUIRED arguments and set QE_FOUND to TRUE
|
||||
# if all listed variables are TRUE
|
||||
|
||||
find_package_handle_standard_args(QE DEFAULT_MSG QECOUPLE_LIBRARY PW_LIBRARY QEMOD_LIBRARY QEFFT_LIBRARY QELA_LIBRARY CLIB_LIBRARY IOTK_LIBRARY QE_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(QE_INCLUDE_DIR QECOUPLE_LIBRARY PW_LIBRARY QEMOD_LIBRARY QEFFT_LIBRARY QELA_LIBRARY CLIB_LIBRARY IOTK_LIBRARY)
|
||||
@ -1,9 +1,13 @@
|
||||
if(PKG_USER-QMMM)
|
||||
enable_language(Fortran)
|
||||
enable_language(C)
|
||||
|
||||
message(WARNING "Building QMMM with CMake is still experimental")
|
||||
find_package(QE REQUIRED)
|
||||
include_directories(${QE_INCLUDE_DIRS})
|
||||
list(APPEND LAMMPS_LINK_LIBS ${QE_LIBRARIES})
|
||||
if(NOT BUILD_LIB)
|
||||
message(FATAL_ERROR "Building a QM/MM executable with USER-QMMM requires BUILD_LIB=yes")
|
||||
endif()
|
||||
if(NOT BUILD_SHARED_LIBS)
|
||||
message(WARNING "It is recommended to use BUILD_SHARED_LIBS=yes with USER-QMMM")
|
||||
endif()
|
||||
add_library(qmmm STATIC ${LAMMPS_LIB_SOURCE_DIR}/qmmm/libqmmm.c)
|
||||
list(APPEND LAMMPS_LINK_LIBS qmmm)
|
||||
target_include_directories(qmmm PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/qmmm)
|
||||
endif()
|
||||
|
||||
2
doc/.gitignore
vendored
@ -1,6 +1,8 @@
|
||||
/old
|
||||
/html
|
||||
/html-offline
|
||||
/latex
|
||||
/mathjax
|
||||
/spelling
|
||||
/LAMMPS.epub
|
||||
/LAMMPS.mobi
|
||||
|
||||
50
doc/Makefile
@ -4,6 +4,7 @@ SHELL = /bin/bash
|
||||
BUILDDIR = ${CURDIR}
|
||||
RSTDIR = $(BUILDDIR)/src
|
||||
VENV = $(BUILDDIR)/docenv
|
||||
MATHJAX = $(BUILDDIR)/mathjax
|
||||
TXT2RST = $(VENV)/bin/txt2rst
|
||||
ANCHORCHECK = $(VENV)/bin/rst_anchor_check
|
||||
|
||||
@ -28,50 +29,48 @@ endif
|
||||
|
||||
SPHINXEXTRA = -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiprocessing.cpu_count())')
|
||||
|
||||
.PHONY: help clean-all clean epub mobi rst html pdf venv spelling anchor_check style_check
|
||||
.PHONY: help clean-all clean clean-spelling epub mobi rst html pdf spelling anchor_check style_check
|
||||
|
||||
# ------------------------------------------
|
||||
|
||||
help:
|
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html create HTML doc pages in html dir"
|
||||
@echo " pdf create Developer.pdf and Manual.pdf in this dir"
|
||||
@echo " fetch fetch HTML and PDF files from LAMMPS web site"
|
||||
@echo " epub create ePUB format manual for e-book readers"
|
||||
@echo " mobi convert ePUB to MOBI format manual for e-book readers (e.g. Kindle)"
|
||||
@echo " html create HTML doc pages in html dir"
|
||||
@echo " pdf create Developer.pdf and Manual.pdf in this dir"
|
||||
@echo " fetch fetch HTML and PDF files from LAMMPS web site"
|
||||
@echo " epub create ePUB format manual for e-book readers"
|
||||
@echo " mobi convert ePUB to MOBI format manual for e-book readers (e.g. Kindle)"
|
||||
@echo " (requires ebook-convert tool from calibre)"
|
||||
@echo " clean remove all intermediate RST files"
|
||||
@echo " clean-all reset the entire build environment"
|
||||
@echo " clean remove all intermediate RST files"
|
||||
@echo " clean-all reset the entire build environment"
|
||||
@echo " anchor_check scan for duplicate anchor labels"
|
||||
@echo " style_check check for complete and consistent style lists"
|
||||
@echo " spelling spell-check the manual"
|
||||
@echo " package_check check for complete and consistent package lists"
|
||||
@echo " spelling spell-check the manual"
|
||||
|
||||
# ------------------------------------------
|
||||
|
||||
clean-all: clean
|
||||
rm -rf $(BUILDDIR)/docenv $(BUILDDIR)/doctrees
|
||||
rm -rf $(BUILDDIR)/docenv $(BUILDDIR)/doctrees $(BUILDDIR)/mathjax
|
||||
|
||||
clean:
|
||||
clean: clean-spelling
|
||||
rm -rf html epub latex
|
||||
rm -rf spelling
|
||||
|
||||
clean-spelling:
|
||||
rm -rf spelling
|
||||
|
||||
rst: clean $(ANCHORCHECK)
|
||||
|
||||
html: $(ANCHORCHECK)
|
||||
html: $(ANCHORCHECK) $(MATHJAX)
|
||||
@(\
|
||||
. $(VENV)/bin/activate ;\
|
||||
sphinx-build $(SPHINXEXTRA) -b html -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) html ;\
|
||||
echo "############################################" ;\
|
||||
rst_anchor_check src/*.rst ;\
|
||||
python utils/check-packages.py -s ../src -d src ;\
|
||||
env LC_ALL=C grep -n '[^ -~]' $(RSTDIR)/*.rst ;\
|
||||
python utils/check-styles.py -s ../src -d src ;\
|
||||
echo "############################################" ;\
|
||||
deactivate ;\
|
||||
)
|
||||
-rm html/searchindex.js
|
||||
@rm -rf html/_sources
|
||||
@rm -rf html/PDF
|
||||
@rm -rf html/USER
|
||||
@ -84,9 +83,11 @@ html: $(ANCHORCHECK)
|
||||
@rm -rf html/USER/.[sg]*
|
||||
@rm -rf html/USER/*/.[sg]*
|
||||
@rm -rf html/USER/*/*.[sg]*
|
||||
@mkdir -p html/_static/mathjax
|
||||
@cp -r $(MATHJAX)/es5 html/_static/mathjax/
|
||||
@echo "Build finished. The HTML pages are in doc/html."
|
||||
|
||||
spelling: utils/sphinx-config/false_positives.txt
|
||||
spelling: $(VENV) utils/sphinx-config/false_positives.txt
|
||||
@(\
|
||||
. $(VENV)/bin/activate ;\
|
||||
pip install sphinxcontrib-spelling ;\
|
||||
@ -96,7 +97,7 @@ spelling: utils/sphinx-config/false_positives.txt
|
||||
)
|
||||
@echo "Spell check finished."
|
||||
|
||||
epub:
|
||||
epub: $(VENV)
|
||||
@mkdir -p epub/JPG
|
||||
@rm -f LAMMPS.epub
|
||||
@cp src/JPG/lammps-logo.png epub/
|
||||
@ -128,6 +129,7 @@ pdf: $(ANCHORCHECK)
|
||||
sphinx-build $(SPHINXEXTRA) -b latex -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) latex ;\
|
||||
echo "############################################" ;\
|
||||
rst_anchor_check src/*.rst ;\
|
||||
python utils/check-packages.py -s ../src -d src ;\
|
||||
env LC_ALL=C grep -n '[^ -~]' $(RSTDIR)/*.rst ;\
|
||||
python utils/check-styles.py -s ../src -d src ;\
|
||||
echo "############################################" ;\
|
||||
@ -171,13 +173,20 @@ anchor_check : $(ANCHORCHECK)
|
||||
deactivate ;\
|
||||
)
|
||||
|
||||
style_check :
|
||||
style_check : $(VENV)
|
||||
@(\
|
||||
. $(VENV)/bin/activate ;\
|
||||
python utils/check-styles.py -s ../src -d src ;\
|
||||
deactivate ;\
|
||||
)
|
||||
|
||||
package_check : $(VENV)
|
||||
@(\
|
||||
. $(VENV)/bin/activate ;\
|
||||
python utils/check-packages.py -s ../src -d src ;\
|
||||
deactivate ;\
|
||||
)
|
||||
|
||||
# ------------------------------------------
|
||||
|
||||
$(VENV):
|
||||
@ -190,6 +199,9 @@ $(VENV):
|
||||
deactivate;\
|
||||
)
|
||||
|
||||
$(MATHJAX):
|
||||
@git clone --depth 1 https://github.com/mathjax/MathJax.git mathjax
|
||||
|
||||
$(TXT2RST) $(ANCHORCHECK): $(VENV)
|
||||
@( \
|
||||
. $(VENV)/bin/activate; \
|
||||
|
||||
@ -19,94 +19,115 @@ CMake and make:
|
||||
Serial vs parallel build
|
||||
-------------------------------------
|
||||
|
||||
LAMMPS can be built to run in parallel using the ubiquitous `MPI (message-passing interface) <https://en.wikipedia.org/wiki/Message_Passing_Interface>`_
|
||||
library. Or it can built to run on a single processor (serial)
|
||||
without MPI. It can also be built with support for OpenMP threading
|
||||
(see more discussion below).
|
||||
LAMMPS is written to use the ubiquitous `MPI (Message Passing Interface)
|
||||
<https://en.wikipedia.org/wiki/Message_Passing_Interface>`_ library API
|
||||
for distributed memory parallel computation. You need to have such a
|
||||
library installed for building and running LAMMPS in parallel using a
|
||||
domain decomposition parallelization. It is compatible with the MPI
|
||||
standard version 2.x and later. LAMMPS can also be built into a
|
||||
"serial" executable for use with a single processor using the bundled
|
||||
MPI STUBS library.
|
||||
|
||||
**CMake variables**\ :
|
||||
Independent of the distributed memory MPI parallelization, parts of
|
||||
LAMMPS are also written with support for shared memory parallelization
|
||||
using the OpenMP threading standard. A more detailed discussion of that
|
||||
is below.
|
||||
|
||||
**CMake build**\ :
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D BUILD_MPI=value # yes or no, default is yes if CMake finds MPI, else no
|
||||
-D BUILD_OMP=value # yes or no (default)
|
||||
-D BUILD_OMP=value # yes or no, default is yes if a compatible compiler is detected
|
||||
-D LAMMPS_MACHINE=name # name = mpi, serial, mybox, titan, laptop, etc
|
||||
# no default value
|
||||
|
||||
The executable created by CMake (after running make) is lmp\_name. If
|
||||
the LAMMPS\_MACHINE variable is not specified, the executable is just
|
||||
lmp. Using BUILD\_MPI=no will produce a serial executable.
|
||||
The executable created by CMake (after running make) is named *lmp* unless
|
||||
the LAMMPS\_MACHINE option is set. When setting `LAMMPS_MACHINE=name`
|
||||
the executable will be named *lmp\_name*\. Using `BUILD\_MPI=no` will
|
||||
enforce building a serial executable using the MPI STUBS library.
|
||||
|
||||
**Traditional make**\ :
|
||||
|
||||
The build with traditional makefiles has to be done inside the source folder `src`.
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
cd lammps/src
|
||||
make mpi # parallel build, produces lmp_mpi using Makefile.mpi
|
||||
make serial # serial build, produces lmp_serial using Makefile/serial
|
||||
make mybox # uses Makefile.mybox to produce lmp_mybox
|
||||
|
||||
Serial build (see src/MAKE/Makefile.serial):
|
||||
make mybox # uses Makefile.mybox to produce lmp_mybox
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
Any "make machine" command will look up the make settings from a file
|
||||
Makefile.machine, create a folder Obj\_machine with all objects and
|
||||
generated files and an executable called *lmp\_machine*\ . The standard
|
||||
parallel build with `make mpi` assumes a standard MPI installation with
|
||||
MPI compiler wrappers where all necessary compiler and linker flags to
|
||||
get access and link with the suitable MPI headers and libraries are set
|
||||
by the wrapper programs. For other cases or the serial build, you have
|
||||
to adjust the make file variables MPI\_INC, MPI\_PATH, MPI\_LIB as well
|
||||
as CC and LINK. To enable OpenMP threading usually a compiler specific
|
||||
flag needs to be added to the compile and link commands. For the GNU
|
||||
compilers, this is *-fopenmp*\ , which can be added to the CC and LINK
|
||||
makefile variables.
|
||||
|
||||
For the serial build the following make variables are set (see src/MAKE/Makefile.serial):
|
||||
|
||||
.. code-block:: make
|
||||
|
||||
CC = g++
|
||||
LINK = g++
|
||||
MPI_INC = -I../STUBS
|
||||
MPI_PATH = -L../STUBS
|
||||
MPI_LIB = -lmpi_stubs
|
||||
|
||||
For a parallel build, if MPI is installed on your system in the usual
|
||||
place (e.g. under /usr/local), you do not need to specify the 3
|
||||
variables MPI\_INC, MPI\_PATH, MPI\_LIB. The MPI wrapper on the compiler
|
||||
(e.g. mpicxx, mpiCC) knows where to find the needed include and
|
||||
library files. Failing this, these 3 variables can be used to specify
|
||||
where the mpi.h file (MPI\_INC), and the MPI library files (MPI\_PATH)
|
||||
are found, and the name of the library files (MPI\_LIB).
|
||||
You also need to build the STUBS library for your platform before making
|
||||
LAMMPS itself. A "make serial" build does this for you automatically,
|
||||
otherwise, type "make mpi-stubs" from the src directory, or "make" from
|
||||
the src/STUBS dir. If the build fails, you will need to edit the
|
||||
STUBS/Makefile for your platform. The stubs library does not provide
|
||||
MPI/IO functions required by some LAMMPS packages, e.g. MPIIO or USER-LB,
|
||||
and thus is not compatible with those packages.
|
||||
|
||||
For a serial build, you need to specify the 3 variables, as shown
|
||||
above.
|
||||
.. note::
|
||||
|
||||
For a serial LAMMPS build, use the dummy MPI library provided in
|
||||
src/STUBS. You also need to build the STUBS library for your platform
|
||||
before making LAMMPS itself. A "make serial" build does this for.
|
||||
Otherwise, type "make mpi-stubs" from the src directory, or "make"
|
||||
from the src/STUBS dir. If the build fails, you will need to edit the
|
||||
STUBS/Makefile for your platform.
|
||||
The file STUBS/mpi.c provides a CPU timer function called
|
||||
MPI\_Wtime() that calls gettimeofday() . If your operating system
|
||||
does not support gettimeofday() , you will need to insert code to
|
||||
call another timer. Note that the ANSI-standard function clock()
|
||||
rolls over after an hour or so, and is therefore insufficient for
|
||||
timing long LAMMPS simulations.
|
||||
|
||||
The file STUBS/mpi.c provides a CPU timer function called MPI\_Wtime()
|
||||
that calls gettimeofday() . If your system doesn't support
|
||||
gettimeofday() , you'll need to insert code to call another timer.
|
||||
Note that the ANSI-standard function clock() rolls over after an hour
|
||||
or so, and is therefore insufficient for timing long LAMMPS
|
||||
simulations.
|
||||
**MPI and OpenMP support info**\ :
|
||||
|
||||
**CMake and make info**\ :
|
||||
If you are installing MPI yourself to build a parallel LAMMPS
|
||||
executable, we recommend either MPICH or OpenMPI which are regularly
|
||||
used and tested with LAMMPS by the LAMMPS developers. MPICH can be
|
||||
downloaded from the `MPICH home page <https://www.mpich.org>`_ and
|
||||
OpenMPI can be downloaded correspondingly from the `OpenMPI home page
|
||||
<https://www.open-mpi.org>`_. Other MPI packages should also work. No
|
||||
specific vendor provided and standard compliant MPI library is currently
|
||||
known to be incompatible with LAMMPS. If you are running on a large
|
||||
parallel machine, your system admins or the vendor should have already
|
||||
installed a version of MPI, which is likely to be faster than a
|
||||
self-installed MPICH or OpenMPI, so you should study the provided
|
||||
documentation to find out how to build and link with it.
|
||||
|
||||
If you are installing MPI yourself, we recommend MPICH2 from Argonne
|
||||
National Laboratory or OpenMPI. MPICH can be downloaded from the
|
||||
`Argonne MPI site <http://www.mcs.anl.gov/research/projects/mpich2/>`_.
|
||||
OpenMPI can be downloaded from the `OpenMPI site <http://www.open-mpi.org>`_. Other MPI packages should also work.
|
||||
If you are running on a large parallel machine, your system admins or
|
||||
the vendor should have already installed a version of MPI, which is
|
||||
likely to be faster than a self-installed MPICH or OpenMPI, so find
|
||||
out how to build and link with it.
|
||||
|
||||
The majority of OpenMP (threading) support in LAMMPS is provided by
|
||||
the USER-OMP package; see the :doc:`Speed omp <Speed_omp>` doc page for
|
||||
details. The USER-INTEL package also provides OpenMP support (it is
|
||||
The majority of OpenMP (threading) support in LAMMPS is provided by the
|
||||
USER-OMP package; see the :doc:`Speed omp <Speed_omp>` doc page for
|
||||
details. The USER-INTEL package also includes OpenMP threading (it is
|
||||
compatible with USER-OMP) and adds vectorization support when compiled
|
||||
with the Intel compilers on top of that. Also, the KOKKOS package can
|
||||
be compiled for using OpenMP threading.
|
||||
with compatible compilers, in particular the Intel compilers on top of
|
||||
OpenMP. Also, the KOKKOS package can be compiled to include OpenMP
|
||||
threading.
|
||||
|
||||
However, there are a few commands in LAMMPS that have native OpenMP
|
||||
support. These are commands in the MPIIO, SNAP, USER-DIFFRACTION, and
|
||||
USER-DPD packages. In addition some packages support OpenMP threading
|
||||
indirectly through the libraries they interface to: e.g. LATTE and
|
||||
USER-COLVARS. See the :doc:`Packages details <Packages_details>` doc
|
||||
page for more info on these packages and the doc pages for their
|
||||
respective commands for OpenMP threading info.
|
||||
In addition, there are a few commands in LAMMPS that have native OpenMP
|
||||
support included as well. These are commands in the MPIIO, SNAP,
|
||||
USER-DIFFRACTION, and USER-DPD packages. In addition some packages
|
||||
support OpenMP threading indirectly through the libraries they interface
|
||||
to: e.g. LATTE and USER-COLVARS. See the :doc:`Packages details
|
||||
<Packages_details>` doc page for more info on these packages and the doc
|
||||
pages for their respective commands for OpenMP threading info.
|
||||
|
||||
For CMake, if you use BUILD\_OMP=yes, you can use these packages and
|
||||
turn on their native OpenMP support and turn on their native OpenMP
|
||||
@ -143,22 +164,37 @@ Choice of compiler and compile/link options
|
||||
---------------------------------------------------------
|
||||
|
||||
The choice of compiler and compiler flags can be important for
|
||||
performance. Vendor compilers can produce faster code than
|
||||
open-source compilers like GNU. On boxes with Intel CPUs, we suggest
|
||||
trying the `Intel C++ compiler <intel_>`_.
|
||||
performance. Vendor provided compilers for a specific hardware can
|
||||
produce faster code than open-source compilers like the GNU compilers.
|
||||
On x86 hardware most popular compilers are quite similar in performance
|
||||
of C/C++ code at high optimization levels. When using the USER-INTEL
|
||||
package, there is a distinct advantage in using the `Intel C++ compiler
|
||||
<intel_>`_ due to much improved vectorization through SSE and AVX
|
||||
instructions on compatible hardware as the source code includes changes
|
||||
and compiler directives to enable high degrees of vectorization.
|
||||
|
||||
.. _intel: https://software.intel.com/en-us/intel-compilers
|
||||
|
||||
On parallel clusters or supercomputers which use "environment modules"
|
||||
for their compile/link environments, you can often access different
|
||||
compilers by simply loading the appropriate module before building
|
||||
LAMMPS.
|
||||
|
||||
**CMake build**\ :
|
||||
|
||||
On parallel clusters or supercomputers which use "modules" for their
|
||||
compile/link environments, you can often access different compilers by
|
||||
simply loading the appropriate module before building LAMMPS.
|
||||
By default CMake will use a compiler it finds and it will add
|
||||
optimization flags appropriate to that compiler and any
|
||||
:doc:`accelerator packages <Speed_packages>` you have included in the
|
||||
build.
|
||||
|
||||
**CMake variables**\ :
|
||||
You can tell CMake to look for a specific compiler with these variable
|
||||
settings. Likewise you can specify the FLAGS variables if you want to
|
||||
experiment with alternate optimization flags. You should specify all
|
||||
3 compilers, so that the small number of LAMMPS source files written
|
||||
in C or Fortran are built with a compiler consistent with the one used
|
||||
for all the C++ files:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D CMAKE_CXX_COMPILER=name # name of C++ compiler
|
||||
-D CMAKE_C_COMPILER=name # name of C compiler
|
||||
@ -168,42 +204,42 @@ simply loading the appropriate module before building LAMMPS.
|
||||
-D CMAKE_C_FLAGS=string # flags to use with C compiler
|
||||
-D CMAKE_Fortran_FLAGS=string # flags to use with Fortran compiler
|
||||
|
||||
By default CMake will use a compiler it finds and it will add
|
||||
optimization flags appropriate to that compiler and any :doc:`accelerator packages <Speed_packages>` you have included in the build.
|
||||
|
||||
You can tell CMake to look for a specific compiler with these variable
|
||||
settings. Likewise you can specify the FLAGS variables if you want to
|
||||
experiment with alternate optimization flags. You should specify all
|
||||
3 compilers, so that the small number of LAMMPS source files written
|
||||
in C or Fortran are built with a compiler consistent with the one used
|
||||
for all the C++ files:
|
||||
A few example command lines are:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
Building with GNU Compilers:
|
||||
# Building with GNU Compilers:
|
||||
cmake ../cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_Fortran_COMPILER=gfortran
|
||||
Building with Intel Compilers:
|
||||
# Building with Intel Compilers:
|
||||
cmake ../cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort
|
||||
Building with LLVM/Clang Compilers:
|
||||
# Building with LLVM/Clang Compilers:
|
||||
cmake ../cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_Fortran_COMPILER=flang
|
||||
|
||||
For compiling with the Clang/LLVM compilers a special CMake preset is
|
||||
included that can be loaded with `-C ../cmake/presets/clang.cmake`.
|
||||
|
||||
.. note::
|
||||
|
||||
When the cmake command completes, it prints info to the screen
|
||||
as to which compilers it is using, and what flags will be used in the
|
||||
compilation. Note that if the top-level compiler is mpicxx, it is
|
||||
simply a wrapper on a real compiler. The underlying compiler info is
|
||||
what will be listed in the CMake output. You should check to insure
|
||||
you are using the compiler and optimization flags are the ones you
|
||||
want.
|
||||
When the cmake command completes, it prints a summary to the screen
|
||||
which compilers it is using and what flags and settings will be used
|
||||
for the compilation. Note that if the top-level compiler is mpicxx,
|
||||
it is simply a wrapper on a real compiler. The underlying compiler
|
||||
info is what CMake will try to determine and report. You should check
|
||||
to confirm you are using the compiler and optimization flags you want.
|
||||
|
||||
**Makefile.machine settings**\ :
|
||||
**Makefile.machine settings for traditional make**\ :
|
||||
|
||||
The "compiler/linker settings" section of a Makefile.machine lists
|
||||
compiler and linker settings for your C++ compiler, including
|
||||
optimization flags. For a parallel build it is recommended to use
|
||||
mpicxx or mpiCC, since these compiler wrappers will include a variety of
|
||||
settings appropriate for your MPI installation and thus avoiding the
|
||||
guesswork of finding the right flags.
|
||||
|
||||
Parallel build (see src/MAKE/Makefile.mpi):
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
CC = mpicxx
|
||||
CCFLAGS = -g -O3
|
||||
@ -212,33 +248,26 @@ Parallel build (see src/MAKE/Makefile.mpi):
|
||||
|
||||
Serial build (see src/MAKE/Makefile.serial):
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
CC = g++
|
||||
CCFLAGS = -g -O3
|
||||
LINK = g++
|
||||
LINKFLAGS = -g -O
|
||||
|
||||
The "compiler/linker settings" section of a Makefile.machine lists
|
||||
compiler and linker settings for your C++ compiler, including
|
||||
optimization flags. You should always use mpicxx or mpiCC for
|
||||
a parallel build, since these compiler wrappers will include
|
||||
a variety of settings appropriate for your MPI installation.
|
||||
|
||||
.. note::
|
||||
|
||||
If you build LAMMPS with any :doc:`accelerator packages <Speed_packages>` included, they have specific
|
||||
optimization flags that are either required or recommended for optimal
|
||||
performance. You need to include these in the CCFLAGS and LINKFLAGS
|
||||
settings above. For details, see the individual package doc pages
|
||||
listed on the :doc:`Speed packages <Speed_packages>` doc page. Or
|
||||
examine these files in the src/MAKE/OPTIONS directory. They
|
||||
correspond to each of the 5 accelerator packages and their hardware
|
||||
variants:
|
||||
If you build LAMMPS with any :doc:`accelerator packages <Speed_packages>`
|
||||
included, there may be specific optimization flags that are either
|
||||
required or recommended to enable required features and to achieve
|
||||
optimal performance. You need to include these in the CCFLAGS and
|
||||
LINKFLAGS settings above. For details, see the individual package
|
||||
doc pages listed on the :doc:`Speed packages <Speed_packages>` doc
|
||||
page. Or examine these files in the src/MAKE/OPTIONS directory.
|
||||
They correspond to each of the 5 accelerator packages and their
|
||||
hardware variants:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
Makefile.opt # OPT package
|
||||
Makefile.omp # USER-OMP package
|
||||
@ -249,10 +278,8 @@ a variety of settings appropriate for your MPI installation.
|
||||
Makefile.kokkos_omp # KOKKOS package for CPUs (OpenMP)
|
||||
Makefile.kokkos_phi # KOKKOS package for KNLs (OpenMP)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
.. _exe:
|
||||
|
||||
Build LAMMPS as an executable or a library
|
||||
@ -265,10 +292,13 @@ page for more info on coupling LAMMPS to other codes. See the
|
||||
:doc:`Python <Python_head>` doc page for more info on wrapping and
|
||||
running LAMMPS from Python via its library interface.
|
||||
|
||||
**CMake variables**\ :
|
||||
**CMake build**\ :
|
||||
|
||||
For CMake builds, you can select through setting CMake variables which
|
||||
files the compilation produces during the configuration step. If none
|
||||
are set, defaults are applied.
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D BUILD_EXE=value # yes (default) or no
|
||||
-D BUILD_LIB=value # yes or no (default)
|
||||
@ -277,24 +307,32 @@ running LAMMPS from Python via its library interface.
|
||||
# no default value
|
||||
|
||||
Setting BUILD\_EXE=no will not produce an executable. Setting
|
||||
BUILD\_LIB=yes will produce a static library named liblammps.a.
|
||||
BUILD\_LIB=yes will produce a static library named *liblammps.a*\ .
|
||||
Setting both BUILD\_LIB=yes and BUILD\_SHARED\_LIBS=yes will produce a
|
||||
shared library named liblammps.so. If LAMMPS\_LIB\_SUFFIX is set the generated
|
||||
libraries will be named liblammps\_name.a or liblammps\_name.so instead.
|
||||
shared library named *liblammps.so* instead. If LAMMPS\_LIB\_SUFFIX is
|
||||
set to *name* in addition, the name of the generated libraries will be
|
||||
changed to either *liblammps\_name.a* or *liblammps\_name.so*\ ,
|
||||
respectively.
|
||||
|
||||
**Traditional make**\ :
|
||||
|
||||
With the traditional makefile based build process, the choice of
|
||||
the generated executable or library depends on the "mode" setting.
|
||||
Several options are available and "mode=exe" is the default.
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
cd lammps/src
|
||||
make machine # build LAMMPS executable lmp_machine
|
||||
mkae mode=exe machine # same as "make machine"
|
||||
make mode=lib machine # build LAMMPS static lib liblammps_machine.a
|
||||
make mode=shlib machine # build LAMMPS shared lib liblammps_machine.so
|
||||
make mode=shexe machine # same as "mode=exe" but uses objects from "mode=shlib"
|
||||
|
||||
The two library builds also create generic soft links, named
|
||||
liblammps.a and liblammps.so, which point to the liblammps\_machine
|
||||
files.
|
||||
The two "exe" builds will generate and executable *lmp\_machine*\ ,
|
||||
while the two library builds will create a file *liblammps\_machine.a*
|
||||
or *liblammps\_machine.so*\ . They will also create generic soft links,
|
||||
named *liblammps.a* and *liblammps.so*\ , which point to the specific
|
||||
*liblammps\_machine.a/so* files.
|
||||
|
||||
**CMake and make info**\ :
|
||||
|
||||
@ -302,32 +340,40 @@ Note that for a shared library to be usable by a calling program, all
|
||||
the auxiliary libraries it depends on must also exist as shared
|
||||
libraries. This will be the case for libraries included with LAMMPS,
|
||||
such as the dummy MPI library in src/STUBS or any package libraries in
|
||||
the lib/packages directory, since they are always built as shared
|
||||
libraries using the -fPIC switch. However, if a library like MPI or
|
||||
FFTW does not exist as a shared library, the shared library build will
|
||||
generate an error. This means you will need to install a shared
|
||||
library version of the auxiliary library. The build instructions for
|
||||
the library should tell you how to do this.
|
||||
|
||||
As an example, here is how to build and install the `MPICH library <mpich_>`_, a popular open-source version of MPI, distributed by
|
||||
Argonne National Lab, as a shared library in the default
|
||||
/usr/local/lib location:
|
||||
|
||||
.. _mpich: http://www-unix.mcs.anl.gov/mpi
|
||||
the lib/packages directory, since they are always built in a shared
|
||||
library compatible way using the -fPIC switch. However, if a library
|
||||
like MPI or FFTW does not exist as a shared library, the shared library
|
||||
build may generate an error. This means you will need to install a
|
||||
shared library version of the auxiliary library. The build instructions
|
||||
for the library should tell you how to do this.
|
||||
|
||||
|
||||
As an example, here is how to build and install the `MPICH library
|
||||
<mpich_>`_, a popular open-source version of MPI, as a shared library
|
||||
in the default /usr/local/lib location:
|
||||
|
||||
.. _mpich: https://www.mpich.org
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
./configure --enable-shared
|
||||
make
|
||||
make install
|
||||
|
||||
You may need to use "sudo make install" in place of the last line if
|
||||
you do not have write privileges for /usr/local/lib. The end result
|
||||
should be the file /usr/local/lib/libmpich.so.
|
||||
You may need to use "sudo make install" in place of the last line if you
|
||||
do not have write privileges for /usr/local/lib. The end result should
|
||||
be the file /usr/local/lib/libmpich.so. On many Linux installations the
|
||||
folder "${HOME}/.local" is an alternative to using /usr/local and does
|
||||
not require superuser or sudo access. In that case the configuration
|
||||
step becomes:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
./configure --enable-shared --prefix=${HOME}/.local
|
||||
|
||||
Avoiding using "sudo" for custom software installation (i.e. from source
|
||||
and not through a package manager tool provided by the OS) is generally
|
||||
recommended to ensure the integrity of the system software installation.
|
||||
|
||||
----------
|
||||
|
||||
@ -337,30 +383,39 @@ should be the file /usr/local/lib/libmpich.so.
|
||||
Build the LAMMPS documentation
|
||||
----------------------------------------
|
||||
|
||||
**CMake variable**\ :
|
||||
The LAMMPS manual is written in `reStructuredText <rst_>`_ format which
|
||||
can be translated to different output format using the `Sphinx <sphinx_>`_
|
||||
document generator tool. Currently the translation to HTML and PDF (via
|
||||
LaTeX) are supported. For that to work a Python 3 interpreter and
|
||||
internet access is required. For the documentation build a python
|
||||
based virtual environment is set up in the folder doc/docenv and various
|
||||
python packages are installed into that virtual environment via the pip
|
||||
tool. The actual translation is then done via make commands.
|
||||
|
||||
.. _rst: https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html
|
||||
.. _sphinx: https://sphinx-doc.org
|
||||
|
||||
**Documentation make option**\ :
|
||||
|
||||
The following make commands can be issued in the doc folder of the
|
||||
LAMMPS source distribution.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
make html # create HTML doc pages in html directory
|
||||
make pdf # create Developer.pdf and Manual.pdf in this directory
|
||||
make fetch # fetch HTML and PDF files from LAMMPS web site
|
||||
make clean # remove all intermediate files
|
||||
make clean-all # reset the entire doc build environment
|
||||
make anchor_check # scan for duplicate anchor labels
|
||||
make style_check # check for complete and consistent style lists
|
||||
make package_check # check for complete and consistent package lists
|
||||
make spelling # spell-check the manual
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
-D BUILD_DOC=value # yes or no (default)
|
||||
|
||||
This will create the HTML doc pages within the CMake build directory.
|
||||
The reason to do this is if you want to "install" LAMMPS on a system
|
||||
after the CMake build via "make install", and include the doc pages in
|
||||
the install.
|
||||
|
||||
**Traditional make**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
cd lammps/doc
|
||||
make html # html doc pages
|
||||
make pdf # single Manual.pdf file
|
||||
|
||||
This will create a lammps/doc/html dir with the HTML doc pages so that
|
||||
you can browse them locally on your system. Type "make" from the
|
||||
lammps/doc dir to see other options.
|
||||
Thus "make html" will create a "doc/html" directory with the HTML format
|
||||
manual pages so that you can browse them with a web browser locally on
|
||||
your system.
|
||||
|
||||
.. note::
|
||||
|
||||
@ -369,6 +424,19 @@ lammps/doc dir to see other options.
|
||||
`download page <http://lammps.sandia.gov/download.html>`_.
|
||||
|
||||
|
||||
**CMake build option**\ :
|
||||
|
||||
It is also possible to create the HTML version of the manual within
|
||||
the :doc:`CMake build directory <Build_cmake>`. The reason for this
|
||||
option is to include the installation of the HTML manual pages into
|
||||
the "install" step when installing LAMMPS after the CMake build via
|
||||
"make install".
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
-D BUILD_DOC=value # yes or no (default)
|
||||
|
||||
|
||||
----------
|
||||
|
||||
|
||||
@ -380,19 +448,20 @@ Build LAMMPS tools
|
||||
Some tools described in :doc:`Auxiliary tools <Tools>` can be built directly
|
||||
using CMake or Make.
|
||||
|
||||
**CMake variable**\ :
|
||||
**CMake build3**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D BUILD_TOOLS=value # yes or no (default)
|
||||
|
||||
The generated binaries will also become part of the LAMMPS installation (see below)
|
||||
The generated binaries will also become part of the LAMMPS installation
|
||||
(see below).
|
||||
|
||||
**Traditional make**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
cd lammps/tools
|
||||
make all # build all binaries of tools
|
||||
@ -416,10 +485,10 @@ a globally visible place on your system, for others to access. Note
|
||||
that you may need super-user privileges (e.g. sudo) if the directory
|
||||
you want to copy files to is protected.
|
||||
|
||||
**CMake variable**\ :
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
cmake -D CMAKE_INSTALL_PREFIX=path [options ...] ../cmake
|
||||
make # perform make after CMake command
|
||||
|
||||
@ -20,7 +20,7 @@ make command to build LAMMPS, which uses the created
|
||||
Makefile(s). Example:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
cd lammps # change to the LAMMPS distribution directory
|
||||
mkdir build; cd build # create a new directory (folder) for build
|
||||
@ -52,7 +52,7 @@ After compilation, you may optionally install the LAMMPS executable into
|
||||
your system with:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make install # optional, copy LAMMPS executable & library elsewhere
|
||||
|
||||
@ -115,7 +115,7 @@ folder, recreate the directory and start over.
|
||||
**Command-line version of CMake**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
cmake [options ...] /path/to/lammps/cmake # build from any dir
|
||||
cmake [options ...] ../cmake # build from lammps/build
|
||||
@ -127,7 +127,7 @@ The argument can be preceeded or followed by various CMake
|
||||
command-line options. Several useful ones are:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D CMAKE_INSTALL_PREFIX=path # where to install LAMMPS executable/lib if desired
|
||||
-D CMAKE_BUILD_TYPE=type # type = RelWithDebInfo (default), Release, MinSizeRel, or Debug
|
||||
@ -177,7 +177,7 @@ directory.
|
||||
**Curses version (terminal-style menu) of CMake**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
ccmake ../cmake
|
||||
|
||||
@ -195,7 +195,7 @@ more information.
|
||||
**GUI version of CMake**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
cmake-gui ../cmake
|
||||
|
||||
@ -216,7 +216,7 @@ for more information.
|
||||
Check if your machine already has CMake installed:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
which cmake # do you have it?
|
||||
which cmake3 # version 3 may have this name
|
||||
@ -226,10 +226,10 @@ On clusters or supercomputers which use environment modules to manage
|
||||
software packages, do this:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
module list # is a cmake module already loaded?
|
||||
module avail # is a cmake module available?
|
||||
module list # is a module for cmake already loaded?
|
||||
module avail # is a module for cmake available?
|
||||
module load cmake3 # load cmake module with appropriate name
|
||||
|
||||
Most Linux distributions offer pre-compiled cmake packages through
|
||||
|
||||
@ -18,14 +18,14 @@ generated by the CMake build. To enable a more verbose output during
|
||||
compilation you can use the following option.
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D CMAKE_VERBOSE_MAKEFILE=value # value = no (default) or yes
|
||||
|
||||
Another way of doing this without reconfiguration is calling make with variable VERBOSE set to 1:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make VERBOSE=1
|
||||
|
||||
@ -48,7 +48,7 @@ it. Please note that they come with a performance hit. However, they are
|
||||
usually faster than using tools like Valgrind.
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D ENABLE_SANITIZE_ADDRESS=value # enable Address Sanitizer, value = no (default) or yes
|
||||
-D ENABLE_SANITIZE_UNDEFINED=value # enable Undefined Behaviour Sanitizer, value = no (default) or yes
|
||||
@ -72,7 +72,7 @@ developers can run the tests directly on their workstation.
|
||||
this is incomplete and only represents a small subset of tests that we run
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D ENABLE_TESTING=value # enable simple run tests of LAMMPS, value = no (default) or yes
|
||||
-D LAMMPS_TESTING_SOURCE_DIR=path # path to lammps-testing repository (option if in custom location)
|
||||
@ -81,7 +81,7 @@ developers can run the tests directly on their workstation.
|
||||
If you enable testing in the CMake build it will create an additional target called "test". You can run them with:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make test
|
||||
|
||||
@ -93,14 +93,14 @@ You can also collect code coverage metrics while running the tests by enabling
|
||||
coverage support during building.
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D ENABLE_COVERAGE=value # enable coverage measurements, value = no (default) or yes
|
||||
|
||||
This will also add the following targets to generate coverage reports after running the LAMMPS executable:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make test # run tests first!
|
||||
make gen_coverage_html # generate coverage report in HTML format
|
||||
@ -109,6 +109,6 @@ This will also add the following targets to generate coverage reports after runn
|
||||
These reports require GCOVR to be installed. The easiest way to do this to install it via pip:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
pip install git+https://github.com/gcovr/gcovr.git
|
||||
|
||||
@ -5,10 +5,15 @@ When building with some packages, additional steps may be required,
|
||||
in addition to:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D PKG_NAME=yes # CMake
|
||||
make yes-name # make
|
||||
$ cmake -D PKG_NAME=yes
|
||||
|
||||
or
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make yes-name
|
||||
|
||||
as described on the :doc:`Build\_package <Build_package>` doc page.
|
||||
|
||||
@ -20,18 +25,35 @@ You may need to tell LAMMPS where it is found on your system.
|
||||
|
||||
This is the list of packages that may require additional steps.
|
||||
|
||||
+----------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+
|
||||
| :ref:`COMPRESS <compress>` | :ref:`GPU <gpu>` | :ref:`KIM <kim>` | :ref:`KOKKOS <kokkos>` | :ref:`LATTE <latte>` | :ref:`MESSAGE <message>` |
|
||||
+----------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+
|
||||
| :ref:`MSCG <mscg>` | :ref:`OPT <opt>` | :ref:`POEMS <poems>` | :ref:`PYTHON <python>` | :ref:`VORONOI <voronoi>` | :ref:`USER-ADIOS <user-adios>` |
|
||||
+----------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+
|
||||
| :ref:`USER-ATC <user-atc>` | :ref:`USER-AWPMD <user-awpmd>` | :ref:`USER-COLVARS <user-colvars>` | :ref:`USER-H5MD <user-h5md>` | :ref:`USER-INTEL <user-intel>` | :ref:`USER-MOLFILE <user-molfile>` |
|
||||
+----------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+
|
||||
| :ref:`USER-NETCDF <user-netcdf>` | :ref:`USER-PLUMED <user-plumed>` | :ref:`USER-OMP <user-omp>` | :ref:`USER-QMMM <user-qmmm>` | :ref:`USER-QUIP <user-quip>` | :ref:`USER-SCAFACOS <user-scafacos>` |
|
||||
+----------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+
|
||||
| :ref:`USER-SMD <user-smd>` | :ref:`USER-VTK <user-vtk>` | | | | |
|
||||
+----------------------------------+----------------------------------+------------------------------------+------------------------------+--------------------------------+--------------------------------------+
|
||||
.. table_from_list::
|
||||
:columns: 6
|
||||
|
||||
* :ref:`COMPRESS <compress>`
|
||||
* :ref:`GPU <gpu>`
|
||||
* :ref:`KIM <kim>`
|
||||
* :ref:`KOKKOS <kokkos>`
|
||||
* :ref:`LATTE <latte>`
|
||||
* :ref:`MESSAGE <message>`
|
||||
* :ref:`MSCG <mscg>`
|
||||
* :ref:`OPT <opt>`
|
||||
* :ref:`POEMS <poems>`
|
||||
* :ref:`PYTHON <python>`
|
||||
* :ref:`VORONOI <voronoi>`
|
||||
* :ref:`USER-ADIOS <user-adios>`
|
||||
* :ref:`USER-ATC <user-atc>`
|
||||
* :ref:`USER-AWPMD <user-awpmd>`
|
||||
* :ref:`USER-COLVARS <user-colvars>`
|
||||
* :ref:`USER-H5MD <user-h5md>`
|
||||
* :ref:`USER-INTEL <user-intel>`
|
||||
* :ref:`USER-MOLFILE <user-molfile>`
|
||||
* :ref:`USER-NETCDF <user-netcdf>`
|
||||
* :ref:`USER-PLUMED <user-plumed>`
|
||||
* :ref:`USER-OMP <user-omp>`
|
||||
* :ref:`USER-QMMM <user-qmmm>`
|
||||
* :ref:`USER-QUIP <user-quip>`
|
||||
* :ref:`USER-SCAFACOS <user-scafacos>`
|
||||
* :ref:`USER-SMD <user-smd>`
|
||||
* :ref:`USER-VTK <user-vtk>`
|
||||
|
||||
----------
|
||||
|
||||
@ -49,15 +71,15 @@ available on your system.
|
||||
If CMake cannot find the library, you can set these variables:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D ZLIB_INCLUDE_DIR=path # path to zlib.h header file
|
||||
-D ZLIB_LIBRARIES=path # path to libz.a (.so) file
|
||||
|
||||
**Traditional make**\ :
|
||||
|
||||
If make cannot find the library, you can edit the
|
||||
lib/compress/Makefile.lammps file to specify the paths and library
|
||||
If make cannot find the library, you can edit the file
|
||||
lib/compress/Makefile.lammps to specify the paths and library
|
||||
name.
|
||||
|
||||
|
||||
@ -75,7 +97,7 @@ which GPU hardware to build for.
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D GPU_API=value # value = opencl (default) or cuda
|
||||
-D GPU_PREC=value # precision setting
|
||||
@ -125,12 +147,12 @@ using a command like these, which simply invoke the lib/gpu/Install.py
|
||||
script with the specified args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-gpu # print help message
|
||||
make lib-gpu args="-b" # build GPU library with default Makefile.linux
|
||||
make lib-gpu args="-m xk7 -p single -o xk7.single" # create new Makefile.xk7.single, altered for single-precision
|
||||
make lib-gpu args="-m mpi -a sm_60 -p mixed -b" # build GPU library with mixed precision and P100 using other settings in Makefile.mpi
|
||||
$ make lib-gpu # print help message
|
||||
$ make lib-gpu args="-b" # build GPU library with default Makefile.linux
|
||||
$ make lib-gpu args="-m xk7 -p single -o xk7.single" # create new Makefile.xk7.single, altered for single-precision
|
||||
$ make lib-gpu args="-m mpi -a sm_60 -p mixed -b" # build GPU library with mixed precision and P100 using other settings in Makefile.mpi
|
||||
|
||||
Note that this procedure starts with a Makefile.machine in lib/gpu, as
|
||||
specified by the "-m" switch. For your convenience, machine makefiles
|
||||
@ -181,7 +203,8 @@ use with LAMMPS. If you want to use the :doc:`kim_query <kim_commands>`
|
||||
command, you also need to have libcurl installed with the matching
|
||||
development headers and the curl-config tool.
|
||||
|
||||
See `Obtaining KIM Models <http://openkim.org/doc/usage/obtaining-models>`_ to
|
||||
See the `Obtaining KIM Models <http://openkim.org/doc/usage/obtaining-models>`_
|
||||
web page to
|
||||
learn how to install a pre-build binary of the OpenKIM Repository of Models.
|
||||
See the list of all KIM models here: https://openkim.org/browse/models
|
||||
|
||||
@ -192,7 +215,7 @@ minutes to hours) to build. Of course you only need to do that once.)
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D DOWNLOAD_KIM=value # download OpenKIM API v2 for build, value = no (default) or yes
|
||||
-D LMP_DEBUG_CURL=value # set libcurl verbose mode on/off, value = off (default) or on
|
||||
@ -203,7 +226,7 @@ inside the CMake build directory. If the KIM library is already on
|
||||
your system (in a location CMake cannot find it), set the PKG\_CONFIG\_PATH
|
||||
environment variable so that libkim-api can be found.
|
||||
|
||||
For using OpenKIM web queries in LAMMPS.
|
||||
*For using OpenKIM web queries in LAMMPS*\ :
|
||||
|
||||
If LMP\_DEBUG\_CURL is set, the libcurl verbose mode will be on, and any
|
||||
libcurl calls within the KIM web query display a lot of information about
|
||||
@ -229,16 +252,23 @@ step from the lammps/src dir, using a command like these, which simply
|
||||
invoke the lib/kim/Install.py script with the specified args.
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-kim # print help message
|
||||
make lib-kim args="-b " # (re-)install KIM API lib with only example models
|
||||
make lib-kim args="-b -a Glue_Ercolessi_Adams_Al__MO_324507536345_001" # ditto plus one model
|
||||
make lib-kim args="-b -a everything" # install KIM API lib with all models
|
||||
make lib-kim args="-n -a EAM_Dynamo_Ackland_W__MO_141627196590_002" # add one model or model driver
|
||||
make lib-kim args="-p /usr/local" # use an existing KIM API installation at the provided location
|
||||
make lib-kim args="-p /usr/local -a EAM_Dynamo_Ackland_W__MO_141627196590_002" # ditto but add one model or driver
|
||||
$ make lib-kim # print help message
|
||||
$ make lib-kim args="-b " # (re-)install KIM API lib with only example models
|
||||
$ make lib-kim args="-b -a Glue_Ercolessi_Adams_Al__MO_324507536345_001" # ditto plus one model
|
||||
$ make lib-kim args="-b -a everything" # install KIM API lib with all models
|
||||
$ make lib-kim args="-n -a EAM_Dynamo_Ackland_W__MO_141627196590_002" # add one model or model driver
|
||||
$ make lib-kim args="-p /usr/local" # use an existing KIM API installation at the provided location
|
||||
$ make lib-kim args="-p /usr/local -a EAM_Dynamo_Ackland_W__MO_141627196590_002" # ditto but add one model or driver
|
||||
|
||||
Settings for OpenKIM web queries discussed above need to be applied by adding
|
||||
them to the LMP\_INC variable through editing the Makefile.machine you are
|
||||
using. For example:
|
||||
|
||||
.. code-block:: make
|
||||
|
||||
LMP_INC = -DLMP_NO_SSL_CHECK
|
||||
|
||||
----------
|
||||
|
||||
@ -287,7 +317,7 @@ case-sensitive values, e.g. BDW, not bdw.
|
||||
For multicore CPUs using OpenMP, set these 2 variables.
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D KOKKOS_ARCH=archCPU # archCPU = CPU from list above
|
||||
-D KOKKOS_ENABLE_OPENMP=yes
|
||||
@ -295,7 +325,7 @@ For multicore CPUs using OpenMP, set these 2 variables.
|
||||
For Intel KNLs using OpenMP, set these 2 variables:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D KOKKOS_ARCH=KNL
|
||||
-D KOKKOS_ENABLE_OPENMP=yes
|
||||
@ -303,7 +333,7 @@ For Intel KNLs using OpenMP, set these 2 variables:
|
||||
For NVIDIA GPUs using CUDA, set these 4 variables:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D KOKKOS_ARCH="archCPU;archGPU" # archCPU = CPU from list above that is hosting the GPU
|
||||
# archGPU = GPU from list above
|
||||
@ -316,7 +346,7 @@ Kokkos library: lib/kokkos/bin/nvcc\_wrapper. The setting should
|
||||
include the full path name to the wrapper, e.g.
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D CMAKE_CXX_COMPILER=/home/username/lammps/lib/kokkos/bin/nvcc_wrapper
|
||||
|
||||
@ -329,7 +359,7 @@ src/MAKE/OPTIONS/Makefile.kokkos\* files for examples.
|
||||
For multicore CPUs using OpenMP:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
KOKKOS_DEVICES = OpenMP
|
||||
KOKKOS_ARCH = archCPU # archCPU = CPU from list above
|
||||
@ -337,7 +367,7 @@ For multicore CPUs using OpenMP:
|
||||
For Intel KNLs using OpenMP:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
KOKKOS_DEVICES = OpenMP
|
||||
KOKKOS_ARCH = KNL
|
||||
@ -345,7 +375,7 @@ For Intel KNLs using OpenMP:
|
||||
For NVIDIA GPUs using CUDA:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
KOKKOS_DEVICES = Cuda
|
||||
KOKKOS_ARCH = archCPU,archGPU # archCPU = CPU from list above that is hosting the GPU
|
||||
@ -360,7 +390,7 @@ compiling CUDA files and use a C++ compiler for non-Kokkos, non-CUDA
|
||||
files.
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
KOKKOS_ABSOLUTE_PATH = $(shell cd $(KOKKOS_PATH); pwd)
|
||||
export OMPI_CXX = $(KOKKOS_ABSOLUTE_PATH)/config/nvcc_wrapper
|
||||
@ -381,7 +411,7 @@ library.
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D DOWNLOAD_LATTE=value # download LATTE for build, value = no (default) or yes
|
||||
-D LATTE_LIBRARY=path # LATTE library file (only needed if a custom location)
|
||||
@ -401,12 +431,12 @@ simply invokes the lib/latte/Install.py script with the specified
|
||||
args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-latte # print help message
|
||||
make lib-latte args="-b" # download and build in lib/latte/LATTE-master
|
||||
make lib-latte args="-p $HOME/latte" # use existing LATTE installation in $HOME/latte
|
||||
make lib-latte args="-b -m gfortran" # download and build in lib/latte and
|
||||
$ make lib-latte # print help message
|
||||
$ make lib-latte args="-b" # download and build in lib/latte/LATTE-master
|
||||
$ make lib-latte args="-p $HOME/latte" # use existing LATTE installation in $HOME/latte
|
||||
$ make lib-latte args="-b -m gfortran" # download and build in lib/latte and
|
||||
# copy Makefile.lammps.gfortran to Makefile.lammps
|
||||
|
||||
Note that 3 symbolic (soft) links, "includelink" and "liblink" and
|
||||
@ -431,7 +461,7 @@ be installed on your system.
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D MESSAGE_ZMQ=value # build with ZeroMQ support, value = no (default) or yes
|
||||
-D ZMQ_LIBRARY=path # ZMQ library file (only needed if a custom location)
|
||||
@ -446,11 +476,11 @@ one step from the lammps/src dir, using a command like these, which
|
||||
simply invoke the lib/message/Install.py script with the specified args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-message # print help message
|
||||
make lib-message args="-m -z" # build with MPI and socket (ZMQ) support
|
||||
make lib-message args="-s" # build as serial lib with no ZMQ support
|
||||
$ make lib-message # print help message
|
||||
$ make lib-message args="-m -z" # build with MPI and socket (ZMQ) support
|
||||
$ make lib-message args="-s" # build as serial lib with no ZMQ support
|
||||
|
||||
The build should produce two files: lib/message/cslib/src/libmessage.a
|
||||
and lib/message/Makefile.lammps. The latter is copied from an
|
||||
@ -475,7 +505,7 @@ lib/mscg/README and MSCG/Install files for more details.
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D DOWNLOAD_MSCG=value # download MSCG for build, value = no (default) or yes
|
||||
-D MSCG_LIBRARY=path # MSCG library file (only needed if a custom location)
|
||||
@ -496,14 +526,14 @@ step from the lammps/src dir, using a command like these, which simply
|
||||
invoke the lib/mscg/Install.py script with the specified args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-mscg # print help message
|
||||
make lib-mscg args="-b -m serial" # download and build in lib/mscg/MSCG-release-master
|
||||
$ make lib-mscg # print help message
|
||||
$ make lib-mscg args="-b -m serial" # download and build in lib/mscg/MSCG-release-master
|
||||
# with the settings compatible with "make serial"
|
||||
make lib-mscg args="-b -m mpi" # download and build in lib/mscg/MSCG-release-master
|
||||
$ make lib-mscg args="-b -m mpi" # download and build in lib/mscg/MSCG-release-master
|
||||
# with the settings compatible with "make mpi"
|
||||
make lib-mscg args="-p /usr/local/mscg-release" # use the existing MS-CG installation in /usr/local/mscg-release
|
||||
$ make lib-mscg args="-p /usr/local/mscg-release" # use the existing MS-CG installation in /usr/local/mscg-release
|
||||
|
||||
Note that 2 symbolic (soft) links, "includelink" and "liblink", will
|
||||
be created in lib/mscg to point to the MS-CG src/installation dir.
|
||||
@ -552,12 +582,12 @@ dir, using a command like these, which simply invoke the
|
||||
lib/poems/Install.py script with the specified args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-poems # print help message
|
||||
make lib-poems args="-m serial" # build with GNU g++ compiler (settings as with "make serial")
|
||||
make lib-poems args="-m mpi" # build with default MPI C++ compiler (settings as with "make mpi")
|
||||
make lib-poems args="-m icc" # build with Intel icc compiler
|
||||
$ make lib-poems # print help message
|
||||
$ make lib-poems args="-m serial" # build with GNU g++ compiler (settings as with "make serial")
|
||||
$ make lib-poems args="-m mpi" # build with default MPI C++ compiler (settings as with "make mpi")
|
||||
$ make lib-poems args="-m icc" # build with Intel icc compiler
|
||||
|
||||
The build should produce two files: lib/poems/libpoems.a and
|
||||
lib/poems/Makefile.lammps. The latter is copied from an existing
|
||||
@ -584,7 +614,7 @@ lib/python/README for more details.
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D PYTHON_EXECUTABLE=path # path to Python executable to use
|
||||
|
||||
@ -620,7 +650,7 @@ To build with this package, you must download and build the `Voro++ library <vor
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D DOWNLOAD_VORO=value # download Voro++ for build, value = no (default) or yes
|
||||
-D VORO_LIBRARY=path # Voro++ library file (only needed if at custom location)
|
||||
@ -642,12 +672,12 @@ simply invoke the lib/voronoi/Install.py script with the specified
|
||||
args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-voronoi # print help message
|
||||
make lib-voronoi args="-b" # download and build the default version in lib/voronoi/voro++-<version>
|
||||
make lib-voronoi args="-p $HOME/voro++" # use existing Voro++ installation in $HOME/voro++
|
||||
make lib-voronoi args="-b -v voro++0.4.6" # download and build the 0.4.6 version in lib/voronoi/voro++-0.4.6
|
||||
$ make lib-voronoi # print help message
|
||||
$ make lib-voronoi args="-b" # download and build the default version in lib/voronoi/voro++-<version>
|
||||
$ make lib-voronoi args="-p $HOME/voro++" # use existing Voro++ installation in $HOME/voro++
|
||||
$ make lib-voronoi args="-b -v voro++0.4.6" # download and build the 0.4.6 version in lib/voronoi/voro++-0.4.6
|
||||
|
||||
Note that 2 symbolic (soft) links, "includelink" and "liblink", are
|
||||
created in lib/voronoi to point to the Voro++ src dir. When LAMMPS
|
||||
@ -673,7 +703,7 @@ installation and the instructions below are followed for the respective build sy
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D ADIOS2_DIR=path # path is where ADIOS 2.x is installed
|
||||
-D PKG_USER-ADIOS=yes
|
||||
@ -683,16 +713,16 @@ installation and the instructions below are followed for the respective build sy
|
||||
Turn on the USER-ADIOS package before building LAMMPS. If the ADIOS 2.x software is installed in PATH, there is nothing else to do:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make yes-user-adios
|
||||
$ make yes-user-adios
|
||||
|
||||
otherwise, set ADIOS2\_DIR environment variable when turning on the package:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
ADIOS2_DIR=path make yes-user-adios # path is where ADIOS 2.x is installed
|
||||
$ ADIOS2_DIR=path make yes-user-adios # path is where ADIOS 2.x is installed
|
||||
|
||||
|
||||
----------
|
||||
@ -719,12 +749,12 @@ dir, using a command like these, which simply invoke the
|
||||
lib/atc/Install.py script with the specified args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-atc # print help message
|
||||
make lib-atc args="-m serial" # build with GNU g++ compiler and MPI STUBS (settings as with "make serial")
|
||||
make lib-atc args="-m mpi" # build with default MPI compiler (settings as with "make mpi")
|
||||
make lib-atc args="-m icc" # build with Intel icc compiler
|
||||
$ make lib-atc # print help message
|
||||
$ make lib-atc args="-m serial" # build with GNU g++ compiler and MPI STUBS (settings as with "make serial")
|
||||
$ make lib-atc args="-m mpi" # build with default MPI compiler (settings as with "make mpi")
|
||||
$ make lib-atc args="-m icc" # build with Intel icc compiler
|
||||
|
||||
The build should produce two files: lib/atc/libatc.a and
|
||||
lib/atc/Makefile.lammps. The latter is copied from an existing
|
||||
@ -741,12 +771,12 @@ lib/linalg. In the latter case you also need to build the library in
|
||||
lib/linalg with a command like these:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-linalg # print help message
|
||||
make lib-linalg args="-m serial" # build with GNU Fortran compiler (settings as with "make serial")
|
||||
make lib-linalg args="-m mpi" # build with default MPI Fortran compiler (settings as with "make mpi")
|
||||
make lib-linalg args="-m gfortran" # build with GNU Fortran compiler
|
||||
$ make lib-linalg # print help message
|
||||
$ make lib-linalg args="-m serial" # build with GNU Fortran compiler (settings as with "make serial")
|
||||
$ make lib-linalg args="-m mpi" # build with default MPI Fortran compiler (settings as with "make mpi")
|
||||
$ make lib-linalg args="-m gfortran" # build with GNU Fortran compiler
|
||||
|
||||
|
||||
----------
|
||||
@ -770,12 +800,12 @@ dir, using a command like these, which simply invoke the
|
||||
lib/awpmd/Install.py script with the specified args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-awpmd # print help message
|
||||
make lib-awpmd args="-m serial" # build with GNU g++ compiler and MPI STUBS (settings as with "make serial")
|
||||
make lib-awpmd args="-m mpi" # build with default MPI compiler (settings as with "make mpi")
|
||||
make lib-awpmd args="-m icc" # build with Intel icc compiler
|
||||
$ make lib-awpmd # print help message
|
||||
$ make lib-awpmd args="-m serial" # build with GNU g++ compiler and MPI STUBS (settings as with "make serial")
|
||||
$ make lib-awpmd args="-m mpi" # build with default MPI compiler (settings as with "make mpi")
|
||||
$ make lib-awpmd args="-m icc" # build with Intel icc compiler
|
||||
|
||||
The build should produce two files: lib/awpmd/libawpmd.a and
|
||||
lib/awpmd/Makefile.lammps. The latter is copied from an existing
|
||||
@ -792,12 +822,12 @@ provided in lib/linalg. In the latter case you also need to build the
|
||||
library in lib/linalg with a command like these:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-linalg # print help message
|
||||
make lib-linalg args="-m serial" # build with GNU Fortran compiler (settings as with "make serial")
|
||||
make lib-linalg args="-m mpi" # build with default MPI Fortran compiler (settings as with "make mpi")
|
||||
make lib-linalg args="-m gfortran" # build with GNU Fortran compiler
|
||||
$ make lib-linalg # print help message
|
||||
$ make lib-linalg args="-m serial" # build with GNU Fortran compiler (settings as with "make serial")
|
||||
$ make lib-linalg args="-m mpi" # build with default MPI Fortran compiler (settings as with "make mpi")
|
||||
$ make lib-linalg args="-m gfortran" # build with GNU Fortran compiler
|
||||
|
||||
|
||||
----------
|
||||
@ -844,12 +874,12 @@ command like these, which simply invoke the lib/colvars/Install.py script with
|
||||
the specified args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-colvars # print help message
|
||||
make lib-colvars args="-m serial" # build with GNU g++ compiler (settings as with "make serial")
|
||||
make lib-colvars args="-m mpi" # build with default MPI compiler (settings as with "make mpi")
|
||||
make lib-colvars args="-m g++-debug" # build with GNU g++ compiler and colvars debugging enabled
|
||||
$ make lib-colvars # print help message
|
||||
$ make lib-colvars args="-m serial" # build with GNU g++ compiler (settings as with "make serial")
|
||||
$ make lib-colvars args="-m mpi" # build with default MPI compiler (settings as with "make mpi")
|
||||
$ make lib-colvars args="-m g++-debug" # build with GNU g++ compiler and colvars debugging enabled
|
||||
|
||||
The "machine" argument of the "-m" flag is used to find a Makefile.machine to
|
||||
use as build recipe. If it does not already exist in lib/colvars, it will be
|
||||
@ -858,8 +888,10 @@ core LAMMPS makefiles.
|
||||
|
||||
Optional flags may be specified as environment variables:
|
||||
|
||||
COLVARS\_DEBUG=yes make lib-colvars args="-m machine" # Build with debug code (much slower)
|
||||
COLVARS\_LEPTON=no make lib-colvars args="-m machine" # Build without Lepton (included otherwise)
|
||||
.. code-block:: bash
|
||||
|
||||
$ COLVARS_DEBUG=yes make lib-colvars args="-m machine" # Build with debug code (much slower)
|
||||
$ COLVARS_LEPTON=no make lib-colvars args="-m machine" # Build without Lepton (included otherwise)
|
||||
|
||||
The build should produce two files: the library lib/colvars/libcolvars.a
|
||||
(which also includes Lepton objects if enabled) and the specification file
|
||||
@ -921,7 +953,7 @@ your environment. There are then two additional commands that control
|
||||
the manner in which PLUMED is obtained and linked into LAMMPS.
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D DOWNLOAD_PLUMED=value # download PLUMED for build, value = no (default) or yes
|
||||
-D PLUMED_MODE=value # Linkage mode for PLUMED, value = static (default), shared, or runtime
|
||||
@ -957,12 +989,12 @@ Download/compilation/configuration of the plumed library can be done
|
||||
from the src folder through the following make args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-plumed # print help message
|
||||
make lib-plumed args="-b" # download and build PLUMED in lib/plumed/plumed2
|
||||
make lib-plumed args="-p $HOME/.local" # use existing PLUMED installation in $HOME/.local
|
||||
make lib-plumed args="-p /usr/local -m shared" # use existing PLUMED installation in
|
||||
$ make lib-plumed # print help message
|
||||
$ make lib-plumed args="-b" # download and build PLUMED in lib/plumed/plumed2
|
||||
$ make lib-plumed args="-p $HOME/.local" # use existing PLUMED installation in $HOME/.local
|
||||
$ make lib-plumed args="-p /usr/local -m shared" # use existing PLUMED installation in
|
||||
# /usr/local and use shared linkage mode
|
||||
|
||||
Note that 2 symbolic (soft) links, "includelink" and "liblink" are
|
||||
@ -973,10 +1005,10 @@ mode. After this step is completed, you can install the USER-PLUMED
|
||||
package and compile LAMMPS in the usual manner:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make yes-user-plumed
|
||||
make machine
|
||||
$ make yes-user-plumed
|
||||
$ make machine
|
||||
|
||||
Once this compilation completes you should be able to run LAMMPS in the
|
||||
usual way. For shared linkage mode, libplumed.so must be found by the
|
||||
@ -1024,10 +1056,10 @@ dir, using a command like these, which simply invoke the
|
||||
lib/h5md/Install.py script with the specified args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-h5md # print help message
|
||||
make lib-h5md args="-m h5cc" # build with h5cc compiler
|
||||
$ make lib-h5md # print help message
|
||||
$ make lib-h5md args="-m h5cc" # build with h5cc compiler
|
||||
|
||||
The build should produce two files: lib/h5md/libch5md.a and
|
||||
lib/h5md/Makefile.lammps. The latter is copied from an existing
|
||||
@ -1055,7 +1087,7 @@ on the :doc:`Speed intel <Speed_intel>` doc page.
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D INTEL_ARCH=value # value = cpu (default) or knl
|
||||
-D INTEL_LRT_MODE=value # value = threads, none, or c++11
|
||||
@ -1082,7 +1114,7 @@ additional information.
|
||||
For CPUs:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits -qopt-zmm-usage=high
|
||||
CCFLAGS = -g -qopenmp -DLAMMPS_MEMALIGN=64 -no-offload -fno-alias -ansi-alias -restrict $(OPTFLAGS)
|
||||
@ -1092,7 +1124,7 @@ For CPUs:
|
||||
For KNLs:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
OPTFLAGS = -xMIC-AVX512 -O2 -fp-model fast=2 -no-prec-div -qoverride-limits
|
||||
CCFLAGS = -g -qopenmp -DLAMMPS_MEMALIGN=64 -no-offload -fno-alias -ansi-alias -restrict $(OPTFLAGS)
|
||||
@ -1111,7 +1143,7 @@ USER-MOLFILE package
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D MOLFILE_INCLUDE_DIRS=path # (optional) path where VMD molfile plugin headers are installed
|
||||
-D PKG_USER-MOLFILE=yes
|
||||
@ -1191,9 +1223,9 @@ See src/MAKE/OPTIONS/Makefile.omp for an example.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
CCFLAGS: -fopenmp # for GNU Compilers
|
||||
CCFLAGS: -fopenmp # for GNU and Clang Compilers
|
||||
CCFLAGS: -qopenmp -restrict # for Intel compilers on Linux
|
||||
LINKFLAGS: -fopenmp # for GNU Compilers
|
||||
LINKFLAGS: -fopenmp # for GNU and Clang Compilers
|
||||
LINKFLAGS: -qopenmp # for Intel compilers on Linux
|
||||
|
||||
For other platforms and compilers, please consult the documentation
|
||||
@ -1209,22 +1241,40 @@ how to address compatibility :ref:`issues with the 'default(none)' directive <de
|
||||
USER-QMMM package
|
||||
---------------------------------
|
||||
|
||||
.. note::
|
||||
|
||||
The LAMMPS executable these steps produce is not yet functional
|
||||
for a QM/MM simulation. You must also build Quantum ESPRESSO and
|
||||
create a new executable (pwqmmm.x) which links LAMMPS and Quantum
|
||||
ESPRESSO together. These are steps 3 and 4 described in the
|
||||
lib/qmmm/README file. This requires a compatible Quantum espresso
|
||||
and LAMMPS version. The current interface and makefiles have
|
||||
last been verified to work in February 2020 with Quantum Espresso
|
||||
versions 6.3 to 6.5.
|
||||
For using LAMMPS to do QM/MM simulations via the USER-QMMM package you
|
||||
need to build LAMMPS as a library. A LAMMPS executable with fix qmmm
|
||||
included can be built, but will not be able to do a QM/MM simulation
|
||||
on as such. You must also build a QM code - currently only Quantum
|
||||
ESPRESSO (QE) is supported - and create a new executable which links
|
||||
LAMMPS and the QM code together. Details are given in the
|
||||
lib/qmmm/README file. It is also recommended to read the instructions
|
||||
for :doc:`linking with LAMMPS as a library <Build_link>` for
|
||||
background information. This requires compatible Quantum Espresso
|
||||
and LAMMPS versions. The current interface and makefiles have last
|
||||
been verified to work in February 2020 with Quantum Espresso versions
|
||||
6.3 to 6.5.
|
||||
|
||||
**CMake build**\ :
|
||||
|
||||
The CMake build system currently does not support building the full
|
||||
QM/MM-capable hybrid executable of LAMMPS and QE called pwqmmm.x.
|
||||
You must use the traditional make build for this package.
|
||||
When using CMake, building a LAMMPS library is required and it is
|
||||
recommended to build a shared library, since any libraries built from
|
||||
the sources in the *lib* folder (including the essential libqmmm.a)
|
||||
are not included in the static LAMMPS library and (currently) not
|
||||
installed, while their code is included in the shared LAMMPS library.
|
||||
Thus a typical command line to configure building LAMMPS for USER-QMMM
|
||||
would be:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
cmake -C ../cmake/presets/minimal.cmake -D PKG_USER-QMMM=yes \
|
||||
-D BUILD_LIB=yes -DBUILD_SHARED_LIBS=yes ../cmake
|
||||
|
||||
After completing the LAMMPS build and also configuring and compiling
|
||||
Quantum ESPRESSO with external library support (via "make couple"),
|
||||
go back to the lib/qmmm folder and follow the instructions on the
|
||||
README file to build the combined LAMMPS/QE QM/MM executable
|
||||
(pwqmmm.x) in the lib/qmmm folder. You need to make certain, that
|
||||
|
||||
|
||||
**Traditional make**\ :
|
||||
|
||||
@ -1235,12 +1285,12 @@ lammps/src dir, using a command like these, which simply invoke the
|
||||
lib/qmmm/Install.py script with the specified args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-qmmm # print help message
|
||||
make lib-qmmm args="-m serial" # build with GNU Fortran compiler (settings as in "make serial")
|
||||
make lib-qmmm args="-m mpi" # build with default MPI compiler (settings as in "make mpi")
|
||||
make lib-qmmm args="-m gfortran" # build with GNU Fortran compiler
|
||||
$ make lib-qmmm # print help message
|
||||
$ make lib-qmmm args="-m serial" # build with GNU Fortran compiler (settings as in "make serial")
|
||||
$ make lib-qmmm args="-m mpi" # build with default MPI compiler (settings as in "make mpi")
|
||||
$ make lib-qmmm args="-m gfortran" # build with GNU Fortran compiler
|
||||
|
||||
The build should produce two files: lib/qmmm/libqmmm.a and
|
||||
lib/qmmm/Makefile.lammps. The latter is copied from an existing
|
||||
@ -1252,10 +1302,10 @@ a corresponding Makefile.lammps.machine file.
|
||||
|
||||
You can then install QMMM package and build LAMMPS in the usual
|
||||
manner. After completing the LAMMPS build and compiling Quantum
|
||||
ESPRESSO with external library support, go back to the lib/qmmm folder
|
||||
and follow the instructions on the README file to build the combined
|
||||
LAMMPS/QE QM/MM executable (pwqmmm.x) in the lib/qmmm folder.
|
||||
|
||||
ESPRESSO with external library support (via "make couple"), go back to
|
||||
the lib/qmmm folder and follow the instructions in the README file to
|
||||
build the combined LAMMPS/QE QM/MM executable (pwqmmm.x) in the
|
||||
lib/qmmm folder.
|
||||
|
||||
----------
|
||||
|
||||
@ -1274,7 +1324,7 @@ lib/quip/README file for details on how to do this.
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D QUIP_LIBRARY=path # path to libquip.a (only needed if a custom location)
|
||||
|
||||
@ -1310,7 +1360,7 @@ To build with this package, you must download and build the `ScaFaCoS Coulomb so
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D DOWNLOAD_SCAFACOS=value # download ScaFaCoS for build, value = no (default) or yes
|
||||
-D SCAFACOS_LIBRARY=path # ScaFaCos library file (only needed if at custom location)
|
||||
@ -1355,7 +1405,7 @@ Eigen3 is a template library, so you do not need to build it.
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D DOWNLOAD_EIGEN3 # download Eigen3, value = no (default) or yes
|
||||
-D EIGEN3_INCLUDE_DIR=path # path to Eigen library (only needed if a custom location)
|
||||
@ -1373,11 +1423,11 @@ the lammps/src dir, using a command like these, which simply invoke
|
||||
the lib/smd/Install.py script with the specified args:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make lib-smd # print help message
|
||||
make lib-smd args="-b" # download to lib/smd/eigen3
|
||||
make lib-smd args="-p /usr/include/eigen3" # use existing Eigen installation in /usr/include/eigen3
|
||||
$ make lib-smd # print help message
|
||||
$ make lib-smd args="-b" # download to lib/smd/eigen3
|
||||
$ make lib-smd args="-p /usr/include/eigen3" # use existing Eigen installation in /usr/include/eigen3
|
||||
|
||||
Note that a symbolic (soft) link named "includelink" is created in
|
||||
lib/smd to point to the Eigen dir. When LAMMPS builds it will use
|
||||
|
||||
@ -3,62 +3,228 @@ Link LAMMPS as a library to another code
|
||||
|
||||
LAMMPS can be used as a library by another application, including
|
||||
Python scripts. The files src/library.cpp and library.h define the
|
||||
C-style API for using LAMMPS as a library. See the :doc:`Howto library <Howto_library>` doc page for a description of the
|
||||
interface and how to extend it for your needs.
|
||||
C-style API for using LAMMPS as a library. See the :doc:`Howto
|
||||
library <Howto_library>` doc page for a description of the interface
|
||||
and how to extend it for your needs.
|
||||
|
||||
The :doc:`Build basics <Build_basics>` doc page explains how to build
|
||||
LAMMPS as either a shared or static library. This results in one of
|
||||
these 2 files:
|
||||
|
||||
liblammps.so # shared library
|
||||
liblammps.a # static library
|
||||
.. parsed-literal::
|
||||
|
||||
liblammps.so # shared library
|
||||
liblammps.a # static library
|
||||
|
||||
.. note::
|
||||
|
||||
Care should be taken to use the same MPI library for the calling
|
||||
code and the LAMMPS library. The library.h file includes mpi.h and
|
||||
uses definitions from it so those need to be available and
|
||||
consistent. When LAMMPS is compiled with the MPI STUBS library,
|
||||
then its mpi.h file needs to be included. While it is technically
|
||||
possible to use a full MPI library in the calling code and link to
|
||||
a serial LAMMPS library compiled with MPI STUBS, it is recommended
|
||||
to use the *same* MPI library for both, and then use MPI\_Comm\_split()
|
||||
in the calling code to pass a suitable communicator with a subset
|
||||
of MPI ranks to the function creating the LAMMPS instance.
|
||||
|
||||
----------
|
||||
|
||||
|
||||
**Link with LAMMPS as a static library**\ :
|
||||
|
||||
The calling application can link to LAMMPS as a static library with a
|
||||
link command like this:
|
||||
The calling application can link to LAMMPS as a static library with
|
||||
compilation and link commands as in the examples shown below. These
|
||||
are examples for a code written in C in the file *caller.c*.
|
||||
The benefit of linking to a static library is, that the resulting
|
||||
executable is independent of that library since all required
|
||||
executable code from the library is copied into the calling executable.
|
||||
|
||||
g++ caller.o -L/home/sjplimp/lammps/src -llammps -o caller
|
||||
*CMake build*\ :
|
||||
|
||||
The -L argument is the path to where the liblammps.a file is. The
|
||||
-llammps argument is shorthand for the file liblammps.a.
|
||||
This assumes that LAMMPS has been configured with "-D BUILD_LIB=yes"
|
||||
and installed with "make install" and the PKG\_CONFIG\_PATH environment
|
||||
variable updated to include the *liblammps.pc* file installed into the
|
||||
configured destination folder, if needed. The commands to compile and
|
||||
link the coupled executable are then:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
mpicc -c -O $(pkgconf liblammps --cflags) caller.c
|
||||
mpicxx -o caller caller.o -$(pkgconf liblammps --libs)
|
||||
|
||||
|
||||
*Traditional make*\ :
|
||||
|
||||
This assumes that LAMMPS has been compiled in the folder
|
||||
"${HOME}/lammps/src" with "make mode=lib mpi". The commands to compile
|
||||
and link the coupled executable are then:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
mpicc -c -O -I${HOME}/lammps/src caller.c
|
||||
mpicxx -o caller caller.o -L${HOME}/lammps/src -llammps
|
||||
|
||||
The *-I* argument is the path to the location of the *library.h*
|
||||
header file containing the interface to the LAMMPS C-style library
|
||||
interface. The *-L* argument is the path to where the *liblammps.a*
|
||||
file is located. The *-llammps* argument is shorthand for telling the
|
||||
compiler to link the file *liblammps.a*\ .
|
||||
|
||||
However, it is only as simple as shown above for the case of a plain
|
||||
LAMMPS library without any optional packages that depend on libraries
|
||||
(bundled or external). Otherwise, you need to include all flags,
|
||||
libraries, and paths for the coupled executable, that are also
|
||||
required to link the LAMMPS executable.
|
||||
|
||||
*CMake build*\ :
|
||||
|
||||
When using CMake, additional libraries with sources in the lib folder
|
||||
are built, but not included in liblammps.a and (currently) not
|
||||
installed with "make install" and not included in the *pkgconfig*
|
||||
configuration file. They can be found in the top level build folder,
|
||||
but you have to determine the necessary link flags manually. It is
|
||||
therefore recommended to either use the traditional make procedure to
|
||||
build and link with a static library or build and link with a shared
|
||||
library instead.
|
||||
|
||||
*Traditional make*\ :
|
||||
|
||||
After you have compiled a static LAMMPS library using the conventional
|
||||
build system for example with "make mode=lib serial". And you also
|
||||
have installed the POEMS package after building its bundled library in
|
||||
lib/poems. Then the commands to build and link the coupled executable
|
||||
change to:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
gcc -c -O -I${HOME}/lammps/src/STUBS -I${HOME}/lammps/src -caller.c
|
||||
g++ -o caller caller.o -L${HOME}/lammps/lib/poems \
|
||||
-L${HOME}/lammps/src/STUBS -L${HOME}/lammps/src -llammps -lpoems -lmpi_stubs
|
||||
|
||||
Note, that you need to link with "g++" instead of "gcc", since LAMMPS
|
||||
is C++ code. You can display the currently applied settings for building
|
||||
LAMMPS for the "serial" machine target by using the command:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
make mode=print serial
|
||||
|
||||
Which should output something like:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# Compiler:
|
||||
CXX=g++
|
||||
# Linker:
|
||||
LD=g++
|
||||
# Compilation:
|
||||
CXXFLAGS=-g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -I${HOME}/lammps/lib/poems -I${HOME}/lammps/src/STUBS
|
||||
# Linking:
|
||||
LDFLAGS=-g -O
|
||||
# Libraries:
|
||||
LDLIBS=-L${HOME}/lammps/lib/poems -L${HOME}/lammps/src/STUBS -lpoems -lmpi_stubs
|
||||
|
||||
From this you can gather the necessary paths and flags. With
|
||||
makefiles for other *machine* configurations you need to do the
|
||||
equivalent and replace "serial" with the corresponding *machine* name
|
||||
of the makefile.
|
||||
|
||||
----------
|
||||
|
||||
|
||||
**Link with LAMMPS as a shared library**\ :
|
||||
|
||||
If you wish to link to liblammps.so, the operating system finds shared
|
||||
libraries to load at run-time using the environment variable
|
||||
LD\_LIBRARY\_PATH. To enable this you can do one of two things:
|
||||
When linking to LAMMPS built as a shared library, the situation
|
||||
becomes much simpler, as all dependent libraries and objects are
|
||||
included in the shared library, which is - technically speaking -
|
||||
effectively a regular LAMMPS executable that is missing the `main()`
|
||||
function. Thus those libraries need not to be specified when linking
|
||||
the calling executable. Only the *-I* flags are needed. So the
|
||||
example case from above of the serial version static LAMMPS library
|
||||
with the POEMS package installed becomes:
|
||||
|
||||
(1) Copy the liblammps.so file to a location the system can find it,
|
||||
such as /usr/local/lib. I.e. a directory already listed in your
|
||||
LD\_LIBRARY\_PATH variable. You can type
|
||||
*CMake build*\ :
|
||||
|
||||
The commands with a shared LAMMPS library compiled with the CMake
|
||||
build process are the same as for the static library.
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
mpicc -c -O $(pkgconf liblammps --cflags) caller.c
|
||||
mpicxx -o caller caller.o -$(pkgconf --libs)
|
||||
|
||||
*Traditional make*\ :
|
||||
|
||||
The commands with a shared LAMMPS library compiled with the
|
||||
traditional make build using "make mode=shlib serial" becomes:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
gcc -c -O -I${HOME}/lammps/src/STUBS -I${HOME}/lammps/src -caller.c
|
||||
g++ -o caller caller.o -L${HOME}/lammps/src -llammps
|
||||
|
||||
*Locating liblammps.so at runtime*\ :
|
||||
|
||||
However, now the `liblammps.so` file is required at runtime and needs
|
||||
to be in a folder, where the shared linker program of the operating
|
||||
system can find it. This would be either a folder like "/usr/local/lib64"
|
||||
or "${HOME}/.local/lib64" or a folder pointed to by the LD\_LIBRARY\_PATH
|
||||
environment variable. You can type
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
printenv LD_LIBRARY_PATH
|
||||
|
||||
to see what directories are in that list.
|
||||
|
||||
(2) Add the LAMMPS src directory (or the directory you perform CMake
|
||||
build in) to your LD\_LIBRARY\_PATH, so that the current version of the
|
||||
shared library is always available to programs that use it.
|
||||
Or you can add the LAMMPS src directory (or the directory you performed
|
||||
a CMake style build in) to your LD\_LIBRARY\_PATH, so that the current
|
||||
version of the shared library is always available to programs that use it.
|
||||
|
||||
For the csh or tcsh shells, you would add something like this to your
|
||||
~/.cshrc file:
|
||||
For the Bourne or Korn shells (/bin/sh, /bin/ksh, /bin/bash etc.), you
|
||||
would add something like this to your ~/.profile file:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
LD_LIBRARY_PATH ${LD_LIBRARY_PATH-/usr/lib64}:${HOME}/lammps/src
|
||||
export LD_LIBRARY_PATH
|
||||
|
||||
For the csh or tcsh shells, you would equivalently add something like this
|
||||
to your ~/.cshrc file:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: csh
|
||||
|
||||
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/src
|
||||
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${HOME}/lammps/src
|
||||
|
||||
You can verify whether all required shared libraries are found with the
|
||||
`ldd` tool. Example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ LD_LIBRARY_PATH=/home/user/lammps/src ldd caller
|
||||
linux-vdso.so.1 (0x00007ffe729e0000)
|
||||
liblammps.so => /home/user/lammps/src/liblammps.so (0x00007fc91bb9e000)
|
||||
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fc91b984000)
|
||||
libm.so.6 => /lib64/libm.so.6 (0x00007fc91b83e000)
|
||||
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc91b824000)
|
||||
libc.so.6 => /lib64/libc.so.6 (0x00007fc91b65b000)
|
||||
/lib64/ld-linux-x86-64.so.2 (0x00007fc91c094000)
|
||||
|
||||
|
||||
If a required library is missing, you would get a 'not found' entry:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ ldd caller
|
||||
linux-vdso.so.1 (0x00007ffd672fe000)
|
||||
liblammps.so => not found
|
||||
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fb7c7e86000)
|
||||
libm.so.6 => /usr/lib64/libm.so.6 (0x00007fb7c7d40000)
|
||||
libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007fb7c7d26000)
|
||||
libc.so.6 => /usr/lib64/libc.so.6 (0x00007fb7c7b5d000)
|
||||
/lib64/ld-linux-x86-64.so.2 (0x00007fb7c80a2000)
|
||||
|
||||
|
||||
----------
|
||||
@ -67,18 +233,20 @@ For the csh or tcsh shells, you would add something like this to your
|
||||
**Calling the LAMMPS library**\ :
|
||||
|
||||
Either flavor of library (static or shared) allows one or more LAMMPS
|
||||
objects to be instantiated from the calling program.
|
||||
objects to be instantiated from the calling program. When used from a
|
||||
C++ program, most of the symbols and functions in LAMMPS are wrapped
|
||||
in a LAMMPS\_NS namespace; you can safely use any of its classes and
|
||||
methods from within the calling code, as needed, and you will not incur
|
||||
conflicts with functions and variables in your code that share the name.
|
||||
This, however, does not extend to all additional libraries bundled with
|
||||
LAMMPS in the lib folder and some of the low-level code of some packages.
|
||||
|
||||
When used from a C++ program, all of LAMMPS is wrapped in a LAMMPS\_NS
|
||||
namespace; you can safely use any of its classes and methods from
|
||||
within the calling code, as needed.
|
||||
|
||||
When used from a C or Fortran program, the library has a simple
|
||||
To be compatible with C, Fortran, Python programs, the library has a simple
|
||||
C-style interface, provided in src/library.cpp and src/library.h.
|
||||
|
||||
See the :doc:`Python library <Python_library>` doc page for a
|
||||
description of the Python interface to LAMMPS, which wraps the C-style
|
||||
interface.
|
||||
interface from a shared library through the ctypes python module.
|
||||
|
||||
See the sample codes in examples/COUPLE/simple for examples of C++ and
|
||||
C and Fortran codes that invoke LAMMPS through its library interface.
|
||||
|
||||
@ -7,18 +7,33 @@ src/MAKE/MACHINES, src/MAKE/OPTIONS, or src/MAKE/MINE directory (see
|
||||
below). It can include various options for customizing your LAMMPS
|
||||
build with a number of global compilation options and features.
|
||||
|
||||
Those makefiles are written for and tested with GNU make and may not
|
||||
be compatible with other make programs. In most cases, if the "make"
|
||||
program is not GNU make, then there will be a GNU make program
|
||||
available under the name "gmake". If GNU make or a compatible make is
|
||||
not available, you may have to first install it or switch to building
|
||||
with :doc:`CMake <Build_cmake>`. The makefiles of the traditional
|
||||
make based build process and the scripts they are calling expect a few
|
||||
additional tools to be available and functioning.
|
||||
|
||||
* a Bourne shell compatible "Unix" shell program (often this is bash)
|
||||
* a few shell utilities: ls, mv, ln, rm, grep, sed, tr, cat, touch, diff, dirname
|
||||
* python (optional, required for "make lib-XXX" in the src folder)
|
||||
|
||||
To include LAMMPS packages (i.e. optional commands and styles) you
|
||||
must install them first, as discussed on the :doc:`Build package <Build_package>` doc page. If the packages require
|
||||
provided or external libraries, you must build those libraries before
|
||||
building LAMMPS. Building :doc:`LAMMPS with CMake <Build_cmake>` can
|
||||
automate all of this for many types of machines, especially
|
||||
workstations, desktops and laptops, so we suggest you try it first.
|
||||
must enable them first, as discussed on the :doc:`Build package
|
||||
<Build_package>` doc page. If a packages requires (provided or
|
||||
external) libraries, you must configure and build those libraries
|
||||
**before** building LAMMPS itself and especially **before** enabling
|
||||
such a package with "make yes-<package>". Building :doc:`LAMMPS
|
||||
with CMake <Build_cmake>` can automate much of this for many types of
|
||||
machines, especially workstations, desktops, and laptops, so we suggest
|
||||
you try it first when building LAMMPS in those cases.
|
||||
|
||||
These commands perform a default LAMMPS build, producing the LAMMPS
|
||||
executable lmp\_serial or lmp\_mpi in lammps/src:
|
||||
The commands below perform a default LAMMPS build, producing the LAMMPS
|
||||
executable lmp\_serial and lmp\_mpi in lammps/src:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
cd lammps/src
|
||||
make serial # build a serial LAMMPS executable
|
||||
@ -42,18 +57,21 @@ re-compiled.
|
||||
|
||||
.. note::
|
||||
|
||||
When you build LAMMPS for the first time, a long list of \*.d
|
||||
files will be printed out rapidly. This is not an error; it is the
|
||||
Makefile doing its normal creation of dependencies.
|
||||
|
||||
Before the actual compilation starts, LAMMPS will perform several
|
||||
steps to collect information from the configuration and setup that
|
||||
is then embedded into the executable. When you build LAMMPS for
|
||||
the first time, it will also compile a tool to quickly assemble
|
||||
a list of dependencies, that are required for the make program to
|
||||
correctly detect which parts need to be recompiled after changes
|
||||
were made to the sources.
|
||||
|
||||
----------
|
||||
|
||||
|
||||
The lammps/src/MAKE tree contains all the Makefile.machine files
|
||||
included in the LAMMPS distribution. Typing "make machine" uses
|
||||
Makefile.machine. Thus the "make serial" or "make mpi" lines above
|
||||
use Makefile.serial and Makefile.mpi. Others are in these dirs:
|
||||
The lammps/src/MAKE tree contains the Makefile.machine files included
|
||||
in the LAMMPS distribution. Typing "make machine" uses
|
||||
*Makefile.machine*\ . Thus the "make serial" or "make mpi" lines above
|
||||
use Makefile.serial and Makefile.mpi, respectively. Other makefiles
|
||||
are in these directories:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
@ -64,7 +82,7 @@ use Makefile.serial and Makefile.mpi. Others are in these dirs:
|
||||
|
||||
Typing "make" lists all the available Makefile.machine files. A file
|
||||
with the same name can appear in multiple folders (not a good idea).
|
||||
The order the dirs are searched is as follows: src/MAKE/MINE,
|
||||
The order the directories are searched is as follows: src/MAKE/MINE,
|
||||
src/MAKE, src/MAKE/OPTIONS, src/MAKE/MACHINES. This gives preference
|
||||
to a customized file you put in src/MAKE/MINE.
|
||||
|
||||
@ -76,7 +94,7 @@ compilers, OS configurations, and LAMMPS itself keep changing, their
|
||||
settings may become outdated:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make mac # build serial LAMMPS on a Mac
|
||||
make mac_mpi # build parallel LAMMPS on a Mac
|
||||
|
||||
@ -14,10 +14,13 @@ package. In general there is no need to include a package if you
|
||||
never plan to use its features.
|
||||
|
||||
If you get a run-time error that a LAMMPS command or style is
|
||||
"Unknown", it is often because the command is contained in a package,
|
||||
and your build did not include that package. Running LAMMPS with the
|
||||
:doc:`-h command-line switch <Run_options>` will print all the included
|
||||
packages and commands for that executable.
|
||||
"unknown", it is often because the command is contained in a package,
|
||||
and your build did not include that package. If the command or style
|
||||
*is* available in a package included in the LAMMPS distribution,
|
||||
the error message will indicate which package would be needed.
|
||||
Running LAMMPS with the :doc:`-h command-line switch <Run_options>`
|
||||
will print *all* optional commands and packages that were enabled
|
||||
when building that executable.
|
||||
|
||||
For the majority of packages, if you follow the single step below to
|
||||
include it, you can then build LAMMPS exactly the same as you would
|
||||
@ -42,17 +45,17 @@ packages:
|
||||
The mechanism for including packages is simple but different for CMake
|
||||
versus make.
|
||||
|
||||
**CMake variables**\ :
|
||||
**CMake build**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D PKG_NAME=value # yes or no (default)
|
||||
|
||||
Examples:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D PKG_MANYBODY=yes
|
||||
-D PKG_USER-INTEL=yes
|
||||
@ -74,7 +77,7 @@ once with CMake.
|
||||
**Traditional make**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
cd lammps/src
|
||||
make ps # check which packages are currently installed
|
||||
@ -85,7 +88,7 @@ once with CMake.
|
||||
Examples:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make no-rigid
|
||||
make yes-user-intel
|
||||
@ -119,7 +122,7 @@ are already included. Likewise, if a package is excluded, other files
|
||||
dependent on that package are also excluded.
|
||||
|
||||
When you download a LAMMPS tarball or download LAMMPS source files
|
||||
from the Git or SVN repositories, no packages are pre-installed in the
|
||||
from the git repository, no packages are pre-installed in the
|
||||
src directory.
|
||||
|
||||
.. note::
|
||||
@ -136,9 +139,10 @@ src directory.
|
||||
**CMake shortcuts for installing many packages**\ :
|
||||
|
||||
Instead of specifying all the CMake options via the command-line,
|
||||
CMake allows initializing the variable cache using script files. These
|
||||
are regular CMake files which can manipulate and set variables, and
|
||||
can also contain control flow constructs.
|
||||
CMake allows initializing its settings cache using script files.
|
||||
These are regular CMake files which can manipulate and set CMake
|
||||
variables (which represent selected options), and can also contain
|
||||
control flow constructs for more complex operations.
|
||||
|
||||
LAMMPS includes several of these files to define configuration
|
||||
"presets", similar to the options that exist for the Make based
|
||||
@ -146,25 +150,19 @@ system. Using these files you can enable/disable portions of the
|
||||
available packages in LAMMPS. If you need a custom preset you can take
|
||||
one of them as a starting point and customize it to your needs.
|
||||
|
||||
+-------------------------------------------------------------+-----------------------------------------------------------+
|
||||
| cmake -C ../cmake/presets/all\_on.cmake [OPTIONS] ../cmake | enable all packages |
|
||||
+-------------------------------------------------------------+-----------------------------------------------------------+
|
||||
| cmake -C ../cmake/presets/all\_off.cmake [OPTIONS] ../cmake | disable all packages |
|
||||
+-------------------------------------------------------------+-----------------------------------------------------------+
|
||||
| cmake -C ../cmake/presets/minimal.cmake [OPTIONS] ../cmake | enable just a few core packages |
|
||||
+-------------------------------------------------------------+-----------------------------------------------------------+
|
||||
| cmake -C ../cmake/presets/most.cmake [OPTIONS] ../cmake | enable most common packages |
|
||||
+-------------------------------------------------------------+-----------------------------------------------------------+
|
||||
| cmake -C ../cmake/presets/nolib.cmake [OPTIONS] ../cmake | disable packages that do require extra libraries or tools |
|
||||
+-------------------------------------------------------------+-----------------------------------------------------------+
|
||||
| cmake -C ../cmake/presets/clang.cmake [OPTIONS] ../cmake | change settings to use the Clang compilers by default |
|
||||
+-------------------------------------------------------------+-----------------------------------------------------------+
|
||||
| cmake -C ../cmake/presets/mingw.cmake [OPTIONS] ../cmake | enable all packages compatible with MinGW compilers |
|
||||
+-------------------------------------------------------------+-----------------------------------------------------------+
|
||||
.. code-block:: bash
|
||||
|
||||
cmake -C ../cmake/presets/all_on.cmake [OPTIONS] ../cmake # enable all packages
|
||||
cmake -C ../cmake/presets/all_off.cmake [OPTIONS] ../cmake # disable all packages
|
||||
cmake -C ../cmake/presets/minimal.cmake [OPTIONS] ../cmake # enable just a few core packages
|
||||
cmake -C ../cmake/presets/most.cmake [OPTIONS] ../cmake # enable most common packages
|
||||
cmake -C ../cmake/presets/nolib.cmake [OPTIONS] ../cmake # disable packages that do require extra libraries or tools
|
||||
cmake -C ../cmake/presets/clang.cmake [OPTIONS] ../cmake # change settings to use the Clang compilers by default
|
||||
cmake -C ../cmake/presets/mingw.cmake [OPTIONS] ../cmake # enable all packages compatible with MinGW compilers
|
||||
|
||||
.. note::
|
||||
|
||||
Running cmake this way manipulates the variable cache in your
|
||||
Running cmake this way manipulates the CMake settings cache in your
|
||||
current build directory. You can combine multiple presets and options
|
||||
in a single cmake run, or change settings incrementally by running
|
||||
cmake with new flags.
|
||||
@ -172,7 +170,7 @@ one of them as a starting point and customize it to your needs.
|
||||
**Example:**
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
# build LAMMPS with most commonly used packages, but then remove
|
||||
# those requiring additional library or tools, but still enable
|
||||
@ -200,37 +198,30 @@ Just type "make" in lammps/src to see a one-line summary.
|
||||
|
||||
These commands install/un-install sets of packages:
|
||||
|
||||
+-----------------------------------+-----------------------------------------------------+
|
||||
| make yes-all | install all packages |
|
||||
+-----------------------------------+-----------------------------------------------------+
|
||||
| make no-all | un-install all packages |
|
||||
+-----------------------------------+-----------------------------------------------------+
|
||||
| make yes-standard or make yes-std | install standard packages |
|
||||
+-----------------------------------+-----------------------------------------------------+
|
||||
| make no-standard or make no-std | un-install standard packages |
|
||||
+-----------------------------------+-----------------------------------------------------+
|
||||
| make yes-user | install user packages |
|
||||
+-----------------------------------+-----------------------------------------------------+
|
||||
| make no-user | un-install user packages |
|
||||
+-----------------------------------+-----------------------------------------------------+
|
||||
| make yes-lib | install packages that require extra libraries |
|
||||
+-----------------------------------+-----------------------------------------------------+
|
||||
| make no-lib | un-install packages that require extra libraries |
|
||||
+-----------------------------------+-----------------------------------------------------+
|
||||
| make yes-ext | install packages that require external libraries |
|
||||
+-----------------------------------+-----------------------------------------------------+
|
||||
| make no-ext | un-install packages that require external libraries |
|
||||
+-----------------------------------+-----------------------------------------------------+
|
||||
.. code-block:: bash
|
||||
|
||||
make yes-all # install all packages
|
||||
make no-all # uninstall all packages
|
||||
make yes-standard or make yes-std # install standard packages
|
||||
make no-standard or make no-std # uninstall standard packages
|
||||
make yes-user # install user packages
|
||||
make no-user # uninstall user packages
|
||||
make yes-lib # install packages that require extra libraries
|
||||
make no-lib # uninstall packages that require extra libraries
|
||||
make yes-ext # install packages that require external libraries
|
||||
make no-ext # uninstall packages that require external libraries
|
||||
|
||||
which install/un-install various sets of packages. Typing "make
|
||||
package" will list all the these commands.
|
||||
|
||||
.. note::
|
||||
|
||||
Installing or un-installing a package works by simply copying
|
||||
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 included or excluded when LAMMPS is built.
|
||||
Installing or un-installing a package for the make based build process
|
||||
works by simply copying files back and forth between the main source
|
||||
directory src and the sub-directories with the package name (e.g.
|
||||
src/KSPACE, src/USER-ATC), so that the files are included or excluded
|
||||
when LAMMPS is built. Only source files in the src folder will be
|
||||
compiled.
|
||||
|
||||
The following make commands help manage files that exist in both the
|
||||
src directory and in package sub-directories. You do not normally
|
||||
@ -257,4 +248,4 @@ Type "make package-overwrite" to overwrite files in the package
|
||||
sub-directories with src files.
|
||||
|
||||
Type "make package-diff" to list all differences between pairs of
|
||||
files in both the src dir and a package dir.
|
||||
files in both the source directory and the package directory.
|
||||
|
||||
@ -4,16 +4,15 @@ Optional build settings
|
||||
LAMMPS can be built with several optional settings. Each sub-section
|
||||
explain how to do this for building both with CMake and make.
|
||||
|
||||
| :ref:`C++11 standard compliance test <cxx11>` when building all of LAMMPS
|
||||
| :ref:`FFT library <fft>` for use with the :doc:`kspace_style pppm <kspace_style>` command
|
||||
| :ref:`Size of LAMMPS data types <size>`
|
||||
| :ref:`Read or write compressed files <gzip>`
|
||||
| :ref:`Output of JPG and PNG files <graphics>` via the :doc:`dump image <dump_image>` command
|
||||
| :ref:`Output of movie files <graphics>` via the :doc:`dump_movie <dump_image>` command
|
||||
| :ref:`Memory allocation alignment <align>`
|
||||
| :ref:`Workaround for long long integers <longlong>`
|
||||
| :ref:`Error handling exceptions <exceptions>` when using LAMMPS as a library
|
||||
|
|
||||
* :ref:`C++11 standard compliance <cxx11>` when building all of LAMMPS
|
||||
* :ref:`FFT library <fft>` for use with the :doc:`kspace_style pppm <kspace_style>` command
|
||||
* :ref:`Size of LAMMPS data types <size>`
|
||||
* :ref:`Read or write compressed files <gzip>`
|
||||
* :ref:`Output of JPG and PNG files <graphics>` via the :doc:`dump image <dump_image>` command
|
||||
* :ref:`Output of movie files <graphics>` via the :doc:`dump_movie <dump_image>` command
|
||||
* :ref:`Memory allocation alignment <align>`
|
||||
* :ref:`Workaround for long long integers <longlong>`
|
||||
* :ref:`Error handling exceptions <exceptions>` when using LAMMPS as a library
|
||||
|
||||
|
||||
----------
|
||||
@ -21,45 +20,16 @@ explain how to do this for building both with CMake and make.
|
||||
|
||||
.. _cxx11:
|
||||
|
||||
C++11 standard compliance test
|
||||
C++11 standard compliance
|
||||
------------------------------------------
|
||||
|
||||
The LAMMPS developers plan to transition to make the C++11 standard the
|
||||
minimum requirement for compiling LAMMPS. Currently this only applies to
|
||||
some packages like KOKKOS while the rest aims to be compatible with the C++98
|
||||
standard. Most currently used compilers are compatible with C++11; some need
|
||||
to set extra flags to switch. To determine the impact of requiring C++11,
|
||||
we have added a simple compliance test to the source code, that will cause
|
||||
the compilation to abort, if C++11 compliance is not available or enabled.
|
||||
To bypass this check, you need to change a setting in the makefile or
|
||||
when calling CMake.
|
||||
to set extra flags to enable C++11 compliance. Example for GNU c++:
|
||||
|
||||
**CMake variable**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
-D DISABLE_CXX11_REQUIREMENT=yes
|
||||
|
||||
You can set additional C++ compiler flags (beyond those selected by CMake)
|
||||
through the CMAKE\_CXX\_FLAGS variable. Example for CentOS 7:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
-D CMAKE_CXX_FLAGS="-O3 -g -fopenmp -DNDEBUG -std=c++11"
|
||||
|
||||
**Makefile.machine setting**\ to bypass the C++11 test and compile in C++98 mode:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
LMP_INC = -DLAMMPS_CXX98
|
||||
|
||||
**Makefile.machine setting**\ to enable the C++11 with older (but not too old) GNU c++ (e.g. on CentOS 7):
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
CCFLAGS = -g -O3 -std=c++11
|
||||
|
||||
@ -80,7 +50,7 @@ LAMMPS can use them if they are available on your system.
|
||||
**CMake variables**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D FFT=value # FFTW3 or MKL or KISS, default is FFTW3 if found, else KISS
|
||||
-D FFT_SINGLE=value # yes or no (default), no = double precision
|
||||
@ -100,7 +70,7 @@ used. If CMake cannot detect the FFT library, you can set these variables
|
||||
to assist:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D FFTW3_INCLUDE_DIRS=path # path to FFTW3 include files
|
||||
-D FFTW3_LIBRARIES=path # path to FFTW3 libraries
|
||||
@ -112,7 +82,7 @@ to assist:
|
||||
**Makefile.machine settings**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
FFT_INC = -DFFT_FFTW3 # -DFFT_FFTW3, -DFFT_FFTW (same as -DFFT_FFTW3), -DFFT_MKL, or -DFFT_KISS
|
||||
# default is KISS if not specified
|
||||
@ -124,7 +94,7 @@ to assist:
|
||||
# default is FFT\_PACK\_ARRAY if not specified
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
FFT_INC = -I/usr/local/include
|
||||
FFT_PATH = -L/usr/local/lib
|
||||
@ -190,7 +160,7 @@ For FFTW3, do the following, which should produce the additional
|
||||
library libfftw3f.a or libfftw3f.so.
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
make clean
|
||||
./configure --enable-single; make; make install
|
||||
@ -218,14 +188,14 @@ adequate.
|
||||
**CMake variable**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D LAMMPS_SIZES=value # smallbig (default) or bigbig or smallsmall
|
||||
|
||||
**Makefile.machine setting**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
LMP_INC = -DLAMMPS_SMALLBIG # or -DLAMMPS_BIGBIG or -DLAMMPS_SMALLSMALL
|
||||
|
||||
@ -296,21 +266,21 @@ following settings:
|
||||
**CMake variables**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D WITH_JPEG=value # yes or no
|
||||
# default = yes if CMake finds JPEG files, else no
|
||||
# default = yes if CMake finds JPEG files, else no
|
||||
-D WITH_PNG=value # yes or no
|
||||
# default = yes if CMake finds PNG and ZLIB files, else no
|
||||
# default = yes if CMake finds PNG and ZLIB files, else no
|
||||
-D WITH_FFMPEG=value # yes or no
|
||||
# default = yes if CMake can find ffmpeg, else no
|
||||
# default = yes if CMake can find ffmpeg, else no
|
||||
|
||||
Usually these settings are all that is needed. If CMake cannot find
|
||||
the graphics header, library, executable files, you can set these
|
||||
variables:
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D JPEG_INCLUDE_DIR=path # path to jpeglib.h header file
|
||||
-D JPEG_LIBRARIES=path # path to libjpeg.a (.so) file
|
||||
@ -323,7 +293,7 @@ variables:
|
||||
**Makefile.machine settings**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
LMP_INC = -DLAMMPS_JPEG
|
||||
LMP_INC = -DLAMMPS_PNG
|
||||
@ -337,7 +307,7 @@ As with CMake, you do not need to set JPG\_INC or JPG\_PATH, if make can
|
||||
find the graphics header and library files. You must specify JPG\_LIB
|
||||
with a list of graphics libraries to include in the link. You must
|
||||
insure ffmpeg is in a directory where LAMMPS can find it at runtime,
|
||||
i.e. a dir in your PATH environment variable.
|
||||
that is a directory in your PATH environment variable.
|
||||
|
||||
**CMake and make info**\ :
|
||||
|
||||
@ -347,7 +317,7 @@ supports the "popen" function in the standard runtime library.
|
||||
.. note::
|
||||
|
||||
On some clusters with high-speed networks, using the fork()
|
||||
library calls (required by popen()) can interfere with the fast
|
||||
library call (required by popen()) can interfere with the fast
|
||||
communication library and lead to simulations using ffmpeg to hang or
|
||||
crash.
|
||||
|
||||
@ -367,7 +337,7 @@ gzip compression by several LAMMPS commands, including
|
||||
**CMake variables**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D WITH_GZIP=value # yes or no
|
||||
# default is yes if CMake can find gzip, else no
|
||||
@ -376,7 +346,7 @@ gzip compression by several LAMMPS commands, including
|
||||
**Makefile.machine setting**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
LMP_INC = -DLAMMPS_GZIP
|
||||
|
||||
@ -389,7 +359,7 @@ found by LAMMPS during a run.
|
||||
.. note::
|
||||
|
||||
On some clusters with high-speed networks, using the fork()
|
||||
library calls (required by popen()) can interfere with the fast
|
||||
library call (required by popen()) can interfere with the fast
|
||||
communication library and lead to simulations using compressed output
|
||||
or input to hang or crash. For selected operations, compressed file
|
||||
I/O is also available using a compression library instead, which is
|
||||
@ -416,7 +386,7 @@ aligned on 64-byte boundaries.
|
||||
**CMake variable**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D LAMMPS_MEMALIGN=value # 0, 8, 16, 32, 64 (default)
|
||||
|
||||
@ -428,7 +398,7 @@ and this setting ignored.
|
||||
**Makefile.machine setting**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
LMP_INC = -DLAMMPS_MEMALIGN=value # 8, 16, 32, 64
|
||||
|
||||
@ -455,14 +425,14 @@ those systems:
|
||||
**CMake variable**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D LAMMPS_LONGLONG_TO_LONG=value # yes or no (default)
|
||||
|
||||
**Makefile.machine setting**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
LMP_INC = -DLAMMPS_LONGLONG_TO_LONG
|
||||
|
||||
@ -476,20 +446,21 @@ Exception handling when using LAMMPS as a library
|
||||
------------------------------------------------------------------
|
||||
|
||||
This setting is useful when external codes drive LAMMPS as a library.
|
||||
With this option enabled LAMMPS errors do not kill the caller.
|
||||
With this option enabled, LAMMPS errors do not kill the calling code.
|
||||
Instead, the call stack is unwound and control returns to the caller,
|
||||
e.g. to Python.
|
||||
e.g. to Python. Of course the calling code has to be set up to
|
||||
*catch* exceptions from within LAMMPS.
|
||||
|
||||
**CMake variable**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: bash
|
||||
|
||||
-D LAMMPS_EXCEPTIONS=value # yes or no (default)
|
||||
|
||||
**Makefile.machine setting**\ :
|
||||
|
||||
|
||||
.. parsed-literal::
|
||||
.. code-block:: make
|
||||
|
||||
LMP_INC = -DLAMMPS_EXCEPTIONS
|
||||
|
||||
@ -7,6 +7,7 @@ alphabetically. Style options for entries like fix, compute, pair etc.
|
||||
have their own pages where they are listed alphabetically.
|
||||
|
||||
Initialization:
|
||||
------------------------------
|
||||
|
||||
* :doc:`newton <newton>`,
|
||||
* :doc:`package <package>`,
|
||||
@ -15,6 +16,7 @@ Initialization:
|
||||
* :doc:`units <units>`
|
||||
|
||||
Setup simulation box:
|
||||
------------------------------
|
||||
|
||||
* :doc:`boundary <boundary>`,
|
||||
* :doc:`box <box>`,
|
||||
@ -25,6 +27,7 @@ Setup simulation box:
|
||||
* :doc:`region <region>`
|
||||
|
||||
Setup atoms:
|
||||
------------------------------
|
||||
|
||||
* :doc:`atom_modify <atom_modify>`,
|
||||
* :doc:`atom_style <atom_style>`,
|
||||
@ -45,6 +48,7 @@ Setup atoms:
|
||||
* :doc:`velocity <velocity>`
|
||||
|
||||
Force fields:
|
||||
------------------------------
|
||||
|
||||
* :doc:`angle_coeff <angle_coeff>`,
|
||||
* :doc:`angle_style <angle_style>`,
|
||||
@ -65,6 +69,7 @@ Force fields:
|
||||
* :doc:`special_bonds <special_bonds>`
|
||||
|
||||
Settings:
|
||||
------------------------------
|
||||
|
||||
* :doc:`comm_modify <comm_modify>`,
|
||||
* :doc:`comm_style <comm_style>`,
|
||||
@ -80,6 +85,7 @@ Settings:
|
||||
* :doc:`timestep <timestep>`
|
||||
|
||||
Operations within timestepping (fixes) and diagnostics (computes):
|
||||
------------------------------------------------------------------------------------------
|
||||
|
||||
* :doc:`compute <compute>`,
|
||||
* :doc:`compute_modify <compute_modify>`,
|
||||
@ -89,6 +95,7 @@ Operations within timestepping (fixes) and diagnostics (computes):
|
||||
* :doc:`unfix <unfix>`
|
||||
|
||||
Output:
|
||||
------------------------------
|
||||
|
||||
* :doc:`dump image <dump_image>`,
|
||||
* :doc:`dump movie <dump_image>`,
|
||||
@ -105,6 +112,7 @@ Output:
|
||||
* :doc:`write_restart <write_restart>`
|
||||
|
||||
Actions:
|
||||
------------------------------
|
||||
|
||||
* :doc:`minimize <minimize>`,
|
||||
* :doc:`neb <neb>`,
|
||||
@ -116,6 +124,7 @@ Actions:
|
||||
* :doc:`temper <temper>`
|
||||
|
||||
Input script control:
|
||||
------------------------------
|
||||
|
||||
* :doc:`clear <clear>`,
|
||||
* :doc:`echo <echo>`,
|
||||
|
||||
@ -9,134 +9,151 @@ file names or user-chosen ID strings.
|
||||
Here are 6 rules for how each line in the input script is parsed by
|
||||
LAMMPS:
|
||||
|
||||
(1) If the last printable character on the line is a "&" character,
|
||||
the command is assumed to continue on the next line. The next line is
|
||||
concatenated to the previous line by removing the "&" character and
|
||||
line break. This allows long commands to be continued across two or
|
||||
more lines. See the discussion of triple quotes in (6) for how to
|
||||
continue a command across multiple line without using "&" characters.
|
||||
.. _one:
|
||||
|
||||
(2) All characters from the first "#" character onward are treated as
|
||||
comment and discarded. See an exception in (6). Note that a
|
||||
comment after a trailing "&" character will prevent the command from
|
||||
continuing on the next line. Also note that for multi-line commands a
|
||||
single leading "#" will comment out the entire command.
|
||||
1. If the last printable character on the line is a "&" character, the
|
||||
command is assumed to continue on the next line. The next line is
|
||||
concatenated to the previous line by removing the "&" character and
|
||||
line break. This allows long commands to be continued across two or
|
||||
more lines. See the discussion of triple quotes in :ref:`6 <six>`
|
||||
for how to continue a command across multiple line without using "&"
|
||||
characters.
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
.. _two:
|
||||
|
||||
# this is a comment
|
||||
2. All characters from the first "#" character onward are treated as
|
||||
comment and discarded. The exception to this rule is described in
|
||||
:ref:`6 <six>`. Note that a comment after a trailing "&" character
|
||||
will prevent the command from continuing on the next line. Also note
|
||||
that for multi-line commands a single leading "#" will comment out
|
||||
the entire command.
|
||||
|
||||
(3) The line is searched repeatedly for $ characters, which indicate
|
||||
variables that are replaced with a text string. See an exception in
|
||||
(6).
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
If the $ is followed by curly brackets, then the variable name is the
|
||||
text inside the curly brackets. If no curly brackets follow the $,
|
||||
then the variable name is the single character immediately following
|
||||
the $. Thus ${myTemp} and $x refer to variable names "myTemp" and
|
||||
"x".
|
||||
# this is a comment
|
||||
timestep 1.0 # this is also a comment
|
||||
|
||||
How the variable is converted to a text string depends on what style
|
||||
of variable it is; see the :doc:`variable <variable>` doc page for details.
|
||||
It can be a variable that stores multiple text strings, and return one
|
||||
of them. The returned text string can be multiple "words" (space
|
||||
separated) which will then be interpreted as multiple arguments in the
|
||||
input command. The variable can also store a numeric formula which
|
||||
will be evaluated and its numeric result returned as a string.
|
||||
.. _three:
|
||||
|
||||
As a special case, if the $ is followed by parenthesis, then the text
|
||||
inside the parenthesis is treated as an "immediate" variable and
|
||||
evaluated as an :doc:`equal-style variable <variable>`. This is a way
|
||||
to use numeric formulas in an input script without having to assign
|
||||
them to variable names. For example, these 3 input script lines:
|
||||
3. The line is searched repeatedly for $ characters, which indicate
|
||||
variables that are replaced with a text string. The exception to
|
||||
this rule is described in :ref:`6 <six>`.
|
||||
|
||||
If the $ is followed by text in curly brackets '{}', then the
|
||||
variable name is the text inside the curly brackets. If no curly
|
||||
brackets follow the $, then the variable name is the single character
|
||||
immediately following the $. Thus ${myTemp} and $x refer to variables
|
||||
named "myTemp" and "x", while "$xx" will be interpreted as a variable
|
||||
named "x" followed by an "x" character.
|
||||
|
||||
How the variable is converted to a text string depends on what style
|
||||
of variable it is; see the :doc:`variable <variable>` doc page for
|
||||
details. It can be a variable that stores multiple text strings, and
|
||||
return one of them. The returned text string can be multiple "words"
|
||||
(space separated) which will then be interpreted as multiple
|
||||
arguments in the input command. The variable can also store a
|
||||
numeric formula which will be evaluated and its numeric result
|
||||
returned as a string.
|
||||
|
||||
As a special case, if the $ is followed by parenthesis "()", then the
|
||||
text inside the parenthesis is treated as an "immediate" variable and
|
||||
evaluated as an :doc:`equal-style variable <variable>`. This is a
|
||||
way to use numeric formulas in an input script without having to
|
||||
assign them to variable names. For example, these 3 input script
|
||||
lines:
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
variable X equal (xlo+xhi)/2+sqrt(v_area)
|
||||
region 1 block $X 2 INF INF EDGE EDGE
|
||||
variable X delete
|
||||
|
||||
can be replaced by:
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
region 1 block $((xlo+xhi)/2+sqrt(v_area)) 2 INF INF EDGE EDGE
|
||||
|
||||
so that you do not have to define (or discard) a temporary variable,
|
||||
"X" in this case.
|
||||
|
||||
Additionally, the "immediate" variable expression may be followed by
|
||||
a colon, followed by a C-style format string, e.g. ":%f" or ":%.10g".
|
||||
The format string must be appropriate for a double-precision
|
||||
floating-point value. The format string is used to output the result
|
||||
of the variable expression evaluation. If a format string is not
|
||||
specified a high-precision "%.20g" is used as the default.
|
||||
|
||||
This can be useful for formatting print output to a desired precision:
|
||||
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
variable X equal (xlo+xhi)/2+sqrt(v_area)
|
||||
region 1 block $X 2 INF INF EDGE EDGE
|
||||
variable X delete
|
||||
print "Final energy per atom: $(pe/atoms:%10.3f) eV/atom"
|
||||
|
||||
can be replaced by
|
||||
Note that neither the curly-bracket or immediate form of variables
|
||||
can contain nested $ characters for other variables to substitute
|
||||
for. Thus you may **NOT** do this:
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
variable a equal 2
|
||||
variable b2 equal 4
|
||||
print "B2 = ${b$a}"
|
||||
|
||||
region 1 block $((xlo+xhi)/2+sqrt(v_area)) 2 INF INF EDGE EDGE
|
||||
Nor can you specify an expression like "$($x-1.0)" for an immediate
|
||||
variable, but you could use $(v\_x-1.0), since the latter is valid
|
||||
syntax for an :doc:`equal-style variable <variable>`.
|
||||
|
||||
so that you do not have to define (or discard) a temporary variable X.
|
||||
See the :doc:`variable <variable>` command for more details of how
|
||||
strings are assigned to variables and evaluated, and how they can
|
||||
be used in input script commands.
|
||||
|
||||
Additionally, the "immediate" variable expression may be followed by a
|
||||
colon, followed by a C-style format string, e.g. ":%f" or ":%.10g".
|
||||
The format string must be appropriate for a double-precision
|
||||
floating-point value. The format string is used to output the result
|
||||
of the variable expression evaluation. If a format string is not
|
||||
specified a high-precision "%.20g" is used as the default.
|
||||
.. _four:
|
||||
|
||||
This can be useful for formatting print output to a desired precision:
|
||||
4. The line is broken into "words" separated by white-space (tabs,
|
||||
spaces). Note that words can thus contain letters, digits,
|
||||
underscores, or punctuation characters.
|
||||
|
||||
.. _five:
|
||||
|
||||
5. The first word is the command name. All successive words in the line
|
||||
are arguments.
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
.. _six:
|
||||
|
||||
print "Final energy per atom: $(pe/atoms:%10.3f) eV/atom"
|
||||
6. If you want text with spaces to be treated as a single argument, it
|
||||
can be enclosed in either single or double or triple quotes. A long
|
||||
single argument enclosed in single or double quotes can span multiple
|
||||
lines if the "&" character is used, as described above. When the
|
||||
lines are concatenated together (and the "&" characters and line
|
||||
breaks removed), the text will become a single line. If you want
|
||||
multiple lines of an argument to retain their line breaks, the text
|
||||
can be enclosed in triple quotes, in which case "&" characters are
|
||||
not needed. For example:
|
||||
|
||||
Note that neither the curly-bracket or immediate form of variables can
|
||||
contain nested $ characters for other variables to substitute for.
|
||||
Thus you cannot do this:
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
variable a equal 2
|
||||
variable b2 equal 4
|
||||
print "B2 = ${b$a}"
|
||||
|
||||
Nor can you specify this $($x-1.0) for an immediate variable, but
|
||||
you could use $(v\_x-1.0), since the latter is valid syntax for an
|
||||
:doc:`equal-style variable <variable>`.
|
||||
|
||||
See the :doc:`variable <variable>` command for more details of how
|
||||
strings are assigned to variables and evaluated, and how they can be
|
||||
used in input script commands.
|
||||
|
||||
(4) The line is broken into "words" separated by white-space (tabs,
|
||||
spaces). Note that words can thus contain letters, digits,
|
||||
underscores, or punctuation characters.
|
||||
|
||||
(5) The first word is the command name. All successive words in the
|
||||
line are arguments.
|
||||
|
||||
(6) If you want text with spaces to be treated as a single argument,
|
||||
it can be enclosed in either single or double or triple quotes. A
|
||||
long single argument enclosed in single or double quotes can span
|
||||
multiple lines if the "&" character is used, as described above. When
|
||||
the lines are concatenated together (and the "&" characters and line
|
||||
breaks removed), the text will become a single line. If you want
|
||||
multiple lines of an argument to retain their line breaks, the text
|
||||
can be enclosed in triple quotes, in which case "&" characters are not
|
||||
needed. For example:
|
||||
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
print "Volume = $v"
|
||||
print 'Volume = $v'
|
||||
if "${steps} > 1000" then quit
|
||||
variable a string "red green blue &
|
||||
print "Volume = $v"
|
||||
print 'Volume = $v'
|
||||
if "${steps} > 1000" then quit
|
||||
variable a string "red green blue &
|
||||
purple orange cyan"
|
||||
print """
|
||||
System volume = $v
|
||||
System temperature = $t
|
||||
"""
|
||||
print """
|
||||
System volume = $v
|
||||
System temperature = $t
|
||||
"""
|
||||
|
||||
In each case, the single, double, or triple quotes are removed when
|
||||
the single argument they enclose is stored internally.
|
||||
In each case, the single, double, or triple quotes are removed when
|
||||
the single argument they enclose is stored internally.
|
||||
|
||||
See the :doc:`dump modify format <dump_modify>`, :doc:`print <print>`,
|
||||
:doc:`if <if>`, and :doc:`python <python>` commands for examples.
|
||||
See the :doc:`dump modify format <dump_modify>`, :doc:`print
|
||||
<print>`, :doc:`if <if>`, and :doc:`python <python>` commands for
|
||||
examples.
|
||||
|
||||
A "#" or "$" character that is between quotes will not be treated as a
|
||||
comment indicator in (2) or substituted for as a variable in (3).
|
||||
A "#" or "$" character that is between quotes will not be treated as
|
||||
a comment indicator in :ref:`2 <two>` or substituted for as a
|
||||
variable in :ref:`3 <three>`.
|
||||
|
||||
.. note::
|
||||
|
||||
|
||||
@ -8,17 +8,20 @@ page.
|
||||
|
||||
A LAMMPS input script typically has 4 parts:
|
||||
|
||||
1. Initialization
|
||||
2. Atom definition
|
||||
3. Settings
|
||||
4. Run a simulation
|
||||
1. :ref:`Initialization <init>`
|
||||
2. :ref:`System definition <system>`
|
||||
3. :ref:`Simulation settings <settings>`
|
||||
4. :ref:`Run a simulation <run>`
|
||||
|
||||
The last 2 parts can be repeated as many times as desired. I.e. run a
|
||||
simulation, change some settings, run some more, etc. Each of the 4
|
||||
parts is now described in more detail. Remember that almost all
|
||||
commands need only be used if a non-default value is desired.
|
||||
|
||||
(1) Initialization
|
||||
.. _init:
|
||||
|
||||
Initialization
|
||||
------------------------------
|
||||
|
||||
Set parameters that need to be defined before atoms are created or
|
||||
read-in from a file.
|
||||
@ -34,23 +37,33 @@ commands tell LAMMPS what kinds of force fields are being used:
|
||||
:doc:`angle_style <angle_style>`, :doc:`dihedral_style <dihedral_style>`,
|
||||
:doc:`improper_style <improper_style>`.
|
||||
|
||||
(2) Atom definition
|
||||
.. _system:
|
||||
|
||||
There are 3 ways to define atoms in LAMMPS. Read them in from a data
|
||||
or restart file via the :doc:`read_data <read_data>` or
|
||||
:doc:`read_restart <read_restart>` commands. These files can contain
|
||||
molecular topology information. Or create atoms on a lattice (with no
|
||||
molecular topology), using these commands: :doc:`lattice <lattice>`,
|
||||
:doc:`region <region>`, :doc:`create_box <create_box>`,
|
||||
:doc:`create_atoms <create_atoms>`. The entire set of atoms can be
|
||||
duplicated to make a larger simulation using the
|
||||
:doc:`replicate <replicate>` command.
|
||||
System definition
|
||||
------------------------------
|
||||
|
||||
(3) Settings
|
||||
There are 3 ways to define the simulation cell and reserve space for
|
||||
force field info and fill it with atoms in LAMMPS. Read them in from
|
||||
(1) a data file or (2) a restart file via the :doc:`read_data
|
||||
<read_data>` or :doc:`read_restart <read_restart>` commands,
|
||||
respectively. These files can also contain molecular topology
|
||||
information. Or (3) create a simulation cell and fill it with atoms on
|
||||
a lattice (with no molecular topology), using these commands:
|
||||
:doc:`lattice <lattice>`, :doc:`region <region>`, :doc:`create_box
|
||||
<create_box>`, :doc:`create_atoms <create_atoms>` or
|
||||
:doc:`read_dump <read_dump>`.
|
||||
|
||||
The entire set of atoms can be duplicated to make a larger simulation
|
||||
using the :doc:`replicate <replicate>` command.
|
||||
|
||||
.. _settings:
|
||||
|
||||
Simulation settings
|
||||
------------------------------
|
||||
|
||||
Once atoms and molecular topology are defined, a variety of settings
|
||||
can be specified: force field coefficients, simulation parameters,
|
||||
output options, etc.
|
||||
output options, and more.
|
||||
|
||||
Force field coefficients are set by these commands (they can also be
|
||||
set in the read-in files): :doc:`pair_coeff <pair_coeff>`,
|
||||
@ -77,7 +90,10 @@ commands.
|
||||
Output options are set by the :doc:`thermo <thermo>`, :doc:`dump <dump>`,
|
||||
and :doc:`restart <restart>` commands.
|
||||
|
||||
(4) Run a simulation
|
||||
.. _run:
|
||||
|
||||
Run a simulation
|
||||
------------------------------
|
||||
|
||||
A molecular dynamics simulation is run using the :doc:`run <run>`
|
||||
command. Energy minimization (molecular statics) is performed using
|
||||
|
||||
|
Before Width: | Height: | Size: 28 KiB |
@ -1,15 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
\usepackage{amsmath}
|
||||
\begin{document}
|
||||
|
||||
\begin{align*}
|
||||
E =& E_2 \sum_{i,j}e^{-k_2 r_{ij}} + E_A \sum_{\substack{i,j,k,\ell \\\in \textrm{type A}}} f(r_{ij})f(r_{k\ell}) + E_B \sum_{\substack{i,j,k,\ell \\\in \textrm{type B}}} f(r_{ij})f(r_{k\ell}) + E_C \sum_{\substack{i,j,k,\ell \\\in \textrm{type C}}} f(r_{ij})f(r_{k\ell}) \\
|
||||
f(r) =& e^{-k_3 r}s(r) \\
|
||||
s(r) =& \begin{cases}
|
||||
1 & r<R_s \\
|
||||
\displaystyle\frac{(R_f-r)^2(R_f-3R_s+2r)}{(R_f-R_s)^3} & R_s\leq r\leq R_f \\
|
||||
0 & r>R_f\\
|
||||
\end{cases}
|
||||
\end{align*}
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 5.0 KiB |
@ -1,9 +0,0 @@
|
||||
\documentstyle[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E_{Pauli(ECP_s)}=p_1\exp\left(-\frac{p_2r^2}{p_3+s^2} \right)
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 9.5 KiB |
@ -1,8 +0,0 @@
|
||||
\documentstyle[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E_{Pauli(ECP_p)}=p_1\left( \frac{2}{p_2/s+s/p_2} \right)\left( r-p_3s\right)^2\exp \left[ -\frac{p_4\left( r-p_3s \right)^2}{p_5+s^2} \right]
|
||||
$$
|
||||
|
||||
|
Before Width: | Height: | Size: 3.3 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E_{KE} = \frac{\hbar^2 }{{m_{e} }}\sum\limits_i {\frac{3}{{2s_i^2 }}}
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 4.1 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E_{NN} = \frac{1}{{4\pi \varepsilon _0 }}\sum\limits_{i < j} {\frac{{Z_i Z_j }}{{R_{ij} }}}
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 6.3 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E_{Ne} = - \frac{1}{{4\pi \varepsilon _0 }}\sum\limits_{i,j} {\frac{{Z_i }}{{R_{ij} }}Erf\left( {\frac{{\sqrt 2 R_{ij} }}{{s_j }}} \right)}
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 5.5 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E_{Pauli} = \sum\limits_{\sigma _i = \sigma _j } {E\left( { \uparrow \uparrow } \right)_{ij}} + \sum\limits_{\sigma _i \ne \sigma _j } {E\left( { \uparrow \downarrow } \right)_{ij}}
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 6.7 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E_{ee} = \frac{1}{{4\pi \varepsilon _0 }}\sum\limits_{i < j} {\frac{1}{{r_{ij} }}Erf\left( {\frac{{\sqrt 2 r_{ij} }}{{\sqrt {s_i^2 + s_j^2 } }}} \right)}
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 9.3 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
U\left(R,r,s\right) = E_{NN} \left( R \right) + E_{Ne} \left( {R,r,s} \right) + E_{ee} \left( {r,s} \right) + E_{KE} \left( {r,s} \right) + E_{PR} \left( { \uparrow \downarrow ,S} \right)
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 8.9 KiB |
@ -1,14 +0,0 @@
|
||||
\documentclass[preview]{standalone}
|
||||
\usepackage{varwidth}
|
||||
\usepackage[utf8x]{inputenc}
|
||||
\usepackage{amsmath, amssymb, graphics, setspace}
|
||||
|
||||
\begin{document}
|
||||
\begin{varwidth}{50in}
|
||||
\begin{equation}
|
||||
\frac{d \vec{s}_{i}}{dt} = \frac{1}{\left(1+\lambda^2 \right)} \left( \left(
|
||||
\vec{\omega}_{i} +\vec{\eta} \right) \times \vec{s}_{i} + \lambda\, \vec{s}_{i}
|
||||
\times\left( \vec{\omega}_{i} \times\vec{s}_{i} \right) \right), \nonumber
|
||||
\end{equation}
|
||||
\end{varwidth}
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 2.6 KiB |
@ -1,11 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\usepackage{amsmath}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
F = \left( 1-\lambda \right) F_{\text{solid}} + \lambda F_{\text{harm}}
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
\lambda(\tau) = \tau
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 5.5 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
\lambda(\tau) = \tau^5 \left( 70 \tau^4 - 315 \tau^3 + 540 \tau^2 - 420 \tau + 126 \right)
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 3.6 KiB |
@ -1,9 +0,0 @@
|
||||
\documentstyle[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
F^{H} = -R_{FU}(U-U^{\infty}) + R_{FE}E^{\infty}
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 4.1 KiB |
@ -1,9 +0,0 @@
|
||||
\documentstyle[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
-R_{FU}(U-U^{\infty}) = -R_{FE}E^{\infty} - F^{rest}
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 15 KiB |
@ -1,11 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{eqnarray*}
|
||||
\mathbf{J} & = & \frac{1}{V} \left[ \sum_i e_i \mathbf{v}_i - \sum_{i} \mathbf{S}_{i} \mathbf{v}_i \right] \\
|
||||
& = & \frac{1}{V} \left[ \sum_i e_i \mathbf{v}_i + \sum_{i<j} \left( \mathbf{f}_{ij} \cdot \mathbf{v}_j \right) \mathbf{x}_{ij} \right] \\
|
||||
& = & \frac{1}{V} \left[ \sum_i e_i \mathbf{v}_i + \frac{1}{2} \sum_{i<j} \left( \mathbf{f}_{ij} \cdot \left(\mathbf{v}_i + \mathbf{v}_j \right) \right) \mathbf{x}_{ij} \right]
|
||||
\end{eqnarray*}
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 8.6 KiB |
@ -1,11 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
\kappa = \frac{V}{k_B T^2} \int_0^\infty \langle J_x(0) J_x(t) \rangle \, dt
|
||||
= \frac{V}{3 k_B T^2} \int_0^\infty \langle \mathbf{J}(0) \cdot \mathbf{J}(t) \rangle \, dt
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
||||
|
Before Width: | Height: | Size: 13 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E = \frac{1}{2} \sum_{i=1}^{N} \sum_{j=i_1}^{i_N} \phi_{ij} \left( r_{ij} \right) - \sum_{i=1}^{N} \sum_{j=i_1}^{i_N} \beta_{\sigma,ij} \left( r_{ij} \right) \cdot \Theta_{\sigma,ij} - \sum_{i=1}^{N} \sum_{j=i_1}^{i_N} \beta_{\pi,ij} \left( r_{ij} \right) \cdot \Theta_{\pi,ij} + U_{prom}
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 5.0 KiB |
@ -1,10 +0,0 @@
|
||||
\documentstyle[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E = A \exp \left(\frac{\sigma - r}{\rho} \right) -
|
||||
\frac{C}{r^6} + \frac{D}{r^8} \qquad r < r_c
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 2.8 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E = A e^{-r / \rho} - \frac{C}{r^6} \qquad r < r_c
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 6.9 KiB |
@ -1,10 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
\pagestyle{empty}
|
||||
|
||||
\begin{eqnarray*}
|
||||
E = A e^{-\kappa r} - \frac{C}{r^6} \cdot \frac{1}{1 + D r^{14}} \qquad r < r_c \\
|
||||
\end{eqnarray*}
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 24 KiB |
@ -1,22 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{eqnarray*}
|
||||
E & = & LJ(r) \qquad \qquad \qquad r < r_{\rm in} \\
|
||||
& = & S(r) * LJ(r) \qquad \qquad r_{\rm in} < r < r_{\rm out} \\
|
||||
& = & 0 \qquad \qquad \qquad \qquad r > r_{\rm out} \\
|
||||
E & = & C(r) \qquad \qquad \qquad r < r_{\rm in} \\
|
||||
& = & S(r) * C(r) \qquad \qquad r_{\rm in} < r < r_{\rm out} \\
|
||||
& = & 0 \qquad \qquad \qquad \qquad r > r_{\rm out} \\
|
||||
LJ(r) & = & 4 \epsilon \left[ \left(\frac{\sigma}{r}\right)^{12} -
|
||||
\left(\frac{\sigma}{r}\right)^6 \right] \\
|
||||
C(r) & = & \frac{C q_i q_j}{ \epsilon r} \\
|
||||
S(r) & = & \frac{ \left[r_{\rm out}^2 - r^2\right]^2
|
||||
\left[r_{\rm out}^2 + 2r^2 - 3{r_{\rm in}^2}\right]}
|
||||
{ \left[r_{\rm out}^2 - {r_{\rm in}}^2\right]^3 }
|
||||
\end{eqnarray*}
|
||||
|
||||
\end{document}
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 5.0 KiB |
@ -1,11 +0,0 @@
|
||||
\documentstyle[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E = \epsilon \left[ 2 \left(\frac{\sigma}{r}\right)^9 -
|
||||
3 \left(\frac{\sigma}{r}\right)^6 \right]
|
||||
\qquad r < r_c
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 12 KiB |
@ -1,16 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{eqnarray*}
|
||||
E = & \frac{27}{4} \epsilon \left[ \left(\frac{\sigma}{r}\right)^{9} -
|
||||
\left(\frac{\sigma}{r}\right)^6 \right] &
|
||||
\qquad r < r_c \\
|
||||
E = & \frac{3\sqrt{3}}{2} \epsilon \left[ \left(\frac{\sigma}{r}\right)^{12} -
|
||||
\left(\frac{\sigma}{r}\right)^4 \right] &
|
||||
\qquad r < r_c \\
|
||||
E = & 4 \epsilon \left[ \left(\frac{\sigma}{r}\right)^{12} -
|
||||
\left(\frac{\sigma}{r}\right)^6 \right] &
|
||||
\qquad r < r_c
|
||||
\end{eqnarray*}
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 42 KiB |
@ -1,31 +0,0 @@
|
||||
\documentstyle[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{eqnarray}
|
||||
U_A &=& - \frac{A_{cc}}{6} \left[
|
||||
\frac{2 a_1 a_2}{r^2-\left(a_1+a_2\right)^2}
|
||||
+ \frac{2 a_1 a_2}{r^2 - \left(a_1 - a_2\right)^2}
|
||||
+ \mathrm{ln}
|
||||
\left(
|
||||
\frac{r^2-\left(a_1+a_2\right)^2}{r^2-\left(a_1-a_2\right)^2}
|
||||
\right)
|
||||
\right] \nonumber \\
|
||||
\nonumber \\
|
||||
U_R &=& \frac{A_{cc}}{37800} \frac{\sigma^6}{r}
|
||||
\left[ \frac{}{} \right. \nonumber \\
|
||||
&&\qquad \frac{r^2-7r\left(a_1+a_2\right)+6\left(a_1^2+7a_1a_2+a_2^2\right)}
|
||||
{\left(r-a_1-a_2\right)^7} \nonumber \\
|
||||
&&\qquad +\frac{r^2+7r\left(a_1+a_2\right)+6\left(a_1^2+7a_1a_2+a_2^2\right)}
|
||||
{\left(r+a_1+a_2\right)^7} \nonumber \\
|
||||
&&\qquad -\frac{r^2+7r\left(a_1-a_2\right)+6\left(a_1^2-7a_1a_2+a_2^2\right)}
|
||||
{\left(r+a_1-a_2\right)^7} \nonumber \\
|
||||
&&\qquad \left. -\frac{r^2-7r\left(a_1-a_2\right)+6\left(a_1^2-7a_1a_2+a_2^2\right)}
|
||||
{\left(r-a_1+a_2\right)^7}
|
||||
\right] \nonumber \\
|
||||
\nonumber \\
|
||||
U &=& U_A + U_R, \qquad r < r_c \nonumber
|
||||
\end{eqnarray}
|
||||
|
||||
\end{document}
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB |
@ -1,12 +0,0 @@
|
||||
\documentstyle[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{eqnarray}
|
||||
U &=& \frac{2 ~ a^3 ~ \sigma^3 ~ A_{cs}}{9 \left( a^2 - r^2 \right)^3}
|
||||
\left[ 1 - \frac{\left(5 ~ a^6+45~a^4~r^2+63~a^2~r^4+15~r^6\right) \sigma^6}
|
||||
{15 \left(a-r\right)^6 \left( a+r \right)^6} \right], ~~ r < r_c \nonumber
|
||||
\end{eqnarray}
|
||||
|
||||
\end{document}
|
||||
|
||||
|
Before Width: | Height: | Size: 5.4 KiB |
@ -1,12 +0,0 @@
|
||||
\documentstyle[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{eqnarray}
|
||||
U &=& \frac{A_{ss}}{36} \left[ \left( \frac{\sigma}{r}
|
||||
\right)^{12} - \left( \frac{ \sigma}{r} \right)^6 \right], ~~
|
||||
r < r_c \nonumber
|
||||
\end{eqnarray}
|
||||
|
||||
\end{document}
|
||||
|
||||
|
Before Width: | Height: | Size: 18 KiB |
@ -1,7 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
\begin{document} \large
|
||||
\begin{eqnarray*}
|
||||
E_T & = & \sum_i [ E_i^{self} (q_i) + \sum_{j>i} [E_{ij}^{short} (r_{ij}, q_i, q_j) + E_{ij}^{Coul} (r_{ij}, q_i, q_j)] + \\
|
||||
&& E^{polar} (q_i, r_{ij}) + E^{vdW} (r_{ij}) + E^{barr} (q_i) + E^{corr} (r_{ij}, \theta_{jik})] \\
|
||||
\end{eqnarray*}
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 39 KiB |
@ -1,23 +0,0 @@
|
||||
\documentclass[10pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{table}[h]
|
||||
\begin{tabular}{|c|c|c|c|c|c|c|c|c|}
|
||||
\hline
|
||||
& $O$ & $Cu$ & $N$ & $C$ & $H$ & $Ti$ & $Zn$ & $Zr$ \\ \hline
|
||||
$O$ & F & F & F & F & F & F & F & F\\ \hline
|
||||
$Cu$ & F & F & P & F & F & P & F & P \\ \hline
|
||||
$N$ & F & P & F & M & F & P & P & P \\ \hline
|
||||
$C$ & F & F & M & F & F & M & M & M \\ \hline
|
||||
$H$ & F & F & F & F & F & M & M & F \\ \hline
|
||||
$Ti$ & F & P & P & M & M & F & P & P \\ \hline
|
||||
$Zn$ & F & F & P & M & M & P & F & P \\ \hline
|
||||
$Zr$ & F & P & P & M & F & P & P & F \\ \hline
|
||||
\multicolumn{9}{l}{F: Fully optimized} \\
|
||||
\multicolumn{9}{l}{M: Only optimized for dimer molecule} \\
|
||||
\multicolumn{9}{l}{P: in Progress but have it from mixing rule} \\
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 8.7 KiB |
@ -1,16 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\usepackage{amsmath}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{align*}
|
||||
E =
|
||||
\begin{cases}
|
||||
-\epsilon& \quad r < \sigma \\
|
||||
-\epsilon\cos\left(\frac{\pi\left(r - \sigma\right)}{2\left(r_c - \sigma\right)}\right)&\quad \sigma \leq r < r_c \\
|
||||
0& \quad r \geq r_c
|
||||
\end{cases}
|
||||
\end{align*}
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 6.6 KiB |
@ -1,11 +0,0 @@
|
||||
\documentstyle[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E = \epsilon \left[ \left(\frac{\sigma}{r}\right)^{12} -
|
||||
2\left(\frac{\sigma}{r}\right)^6 + 1\right]
|
||||
, \quad r < \sigma
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 10 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
\pagestyle{empty}
|
||||
\begin{document}
|
||||
|
||||
\begin{eqnarray*}
|
||||
E & = & \frac{Cq_iq_j}{\epsilon r} \left( \frac{\epsilon}{\epsilon_D(r)}-1\right) \qquad r < r_c \\
|
||||
\epsilon_D(r) & = & \frac{5.2+\epsilon}{2} + \frac{\epsilon-5.2}{2}\tanh\left(\frac{r-r_{me}}{\sigma_e}\right)
|
||||
\end{eqnarray*}
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 12 KiB |
@ -1,10 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
$$
|
||||
E =
|
||||
q_iq_j \left[ \frac{\mbox{erfc} (\alpha r)}{r} - \frac{\mbox{erfc} (\alpha r_c)}{r_c} +
|
||||
\left( \frac{\mbox{erfc} (\alpha r_c)}{r_c^2} + \frac{2\alpha}{\sqrt{\pi}}\frac{\exp (-\alpha^2 r^2_c)}{r_c} \right)(r-r_c) \right] \qquad r < r_c
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 7.1 KiB |
@ -1,15 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\pagestyle{empty}
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E = \frac{C_{q_i q_j}}{\epsilon r_{ij}}\,\, \textrm{erf}\left(\alpha_{ij} r_{ij}\right)\quad\quad\quad r < r_c
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
||||
%%% Local Variables:
|
||||
%%% mode: latex
|
||||
%%% TeX-master: t
|
||||
%%% End:
|
||||
|
Before Width: | Height: | Size: 186 KiB |
@ -1,33 +0,0 @@
|
||||
\documentclass[aps,pr,onecolumn,superscriptaddress,noshowpacs,a4paper,15pt]{revtex4}
|
||||
\pdfoutput=1
|
||||
\bibliographystyle{apsrev4}
|
||||
\usepackage{color}
|
||||
\usepackage{dcolumn} %Align table columns on decimal point
|
||||
\usepackage{amssymb}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{amsthm}
|
||||
\usepackage{graphicx}
|
||||
\usepackage[pdftex]{hyperref}
|
||||
\hypersetup{colorlinks=true,citecolor=blue,linkcolor=red,urlcolor=blue}
|
||||
\usepackage[all]{hypcap}
|
||||
\newcommand{\red}{\color{red}}
|
||||
\newcommand{\blue}{\color{blue}}
|
||||
\definecolor{green}{rgb}{0,0.5,0}
|
||||
\newcommand{\green}{\color{green}}
|
||||
\newcommand{\white}{\color{white}}
|
||||
%\newcommand{\cite}[1]{\hspace{-1 ex} % \nocite{#1}\citenum{#1}}
|
||||
\thickmuskip=0.5\thickmuskip %shorter spaces in math
|
||||
|
||||
\begin{document}
|
||||
\begingroup
|
||||
\Large
|
||||
\begin{eqnarray*}
|
||||
E & = & \frac{1}{2} \sum_i \sum_{j \neq i} V_{ij} \\[15pt]
|
||||
V_{ij} & = & {\rm Tap}(r_{ij})\frac{\kappa q_i q_j}{\sqrt[3]{r_{ij}^3+(1/\lambda_{ij})^3}}\\[15pt]
|
||||
{\rm Tap}(r_{ij}) & = & 20\left ( \frac{r_{ij}}{R_{cut}} \right )^7 -
|
||||
70\left ( \frac{r_{ij}}{R_{cut}} \right )^6 +
|
||||
84\left ( \frac{r_{ij}}{R_{cut}} \right )^5 -
|
||||
35\left ( \frac{r_{ij}}{R_{cut}} \right )^4 + 1
|
||||
\end{eqnarray*}
|
||||
\endgroup
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 8.6 KiB |
@ -1,11 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
$$
|
||||
E_i = \frac{1}{2} \sum_{j \neq i}
|
||||
\frac{q_i q_j {\rm erfc}(\alpha r_{ij})}{r_{ij}} +
|
||||
\frac{1}{2} \sum_{j \neq i}
|
||||
\frac{q_i q_j {\rm erf}(\alpha r_{ij})}{r_{ij}} \qquad r < r_c
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 4.5 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
\thispagestyle{empty}
|
||||
\begin{eqnarray*}
|
||||
E &=& \frac{q_i q_j \mathrm{erf}\left( r/\sqrt{\gamma_1^2+\gamma_2^2} \right) }{\epsilon r_{ij}}
|
||||
\end{eqnarray*}
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,9 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E = \frac{C q_i q_j}{\epsilon r} \qquad r < r_c
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 3.4 KiB |
@ -1,9 +0,0 @@
|
||||
\documentstyle[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
$$
|
||||
E = \frac{C q_i q_j}{\epsilon (r + r_{min})} \qquad r \rightarrow 0
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 3.6 KiB |
@ -1,8 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
$$
|
||||
E = \frac{C q_i q_j}{\epsilon r} \exp(- \kappa r) \qquad r < r_c
|
||||
$$
|
||||
|
||||
\end{document}
|
||||
|
Before Width: | Height: | Size: 46 KiB |
@ -1,38 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{eqnarray*}
|
||||
E_{LJ} & = & 4 \epsilon \left[ \left(\frac{\sigma}{r}\right)^{12} -
|
||||
\left(\frac{\sigma}{r}\right)^6 \right] \\
|
||||
E_{qq} & = & \frac{q_i q_j}{r} \\
|
||||
E_{qp} & = & \frac{q}{r^3} (p \bullet \vec{r}) \\
|
||||
E_{pp} & = & \frac{1}{r^3} (\vec{p_i} \bullet \vec{p_j}) -
|
||||
\frac{3}{r^5} (\vec{p_i} \bullet \vec{r}) (\vec{p_j} \bullet \vec{r})
|
||||
\end{eqnarray*}
|
||||
|
||||
\begin{eqnarray*}
|
||||
F_{qq} & = & \frac{q_i q_j}{r^3} \vec{r} \\
|
||||
F_{qp} & = & -\frac{q}{r^3} \vec{p} + \frac{3q}{r^5}
|
||||
(\vec{p} \bullet \vec{r}) \vec{r} \\
|
||||
F_{pp} & = & \frac{3}{r^5} (\vec{p_i} \bullet \vec{p_j}) \vec{r} -
|
||||
\frac{15}{r^7} (\vec{p_i} \bullet \vec{r})
|
||||
(\vec{p_j} \bullet \vec{r}) \vec{r} +
|
||||
\frac{3}{r^5} \left[ (\vec{p_j} \bullet \vec{r}) \vec{p_i} +
|
||||
(\vec{p_i} \bullet \vec{r}) \vec{p_j} \right]
|
||||
\end{eqnarray*}
|
||||
|
||||
\begin{eqnarray*}
|
||||
T_{pq} = T_{ij} & = & \frac{q_j}{r^3} (\vec{p_i} \times \vec{r}) \\
|
||||
T_{qp} = T_{ji} & = & - \frac{q_i}{r^3} (\vec{p_j} \times \vec{r}) \\
|
||||
T_{pp} = T_{ij} & = & -\frac{1}{r^3} (\vec{p_i} \times \vec{p_j}) +
|
||||
\frac{3}{r^5} (\vec{p_j} \bullet \vec{r})
|
||||
(\vec{p_i} \times \vec{r}) \\
|
||||
T_{pp} = T_{ji} & = & -\frac{1}{r^3} (\vec{p_j} \times \vec{p_i}) +
|
||||
\frac{3}{r^5} (\vec{p_i} \bullet \vec{r})
|
||||
(\vec{p_j} \times \vec{r}) \\
|
||||
\end{eqnarray*}
|
||||
|
||||
\end{document}
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 91 KiB |
@ -1,51 +0,0 @@
|
||||
\documentclass[12pt]{article}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{eqnarray*}
|
||||
E_{LJ} & = & 4\epsilon \left\{ \left[ \left( \frac{\sigma}{r} \right)^{\!12} -
|
||||
\left( \frac{\sigma}{r} \right)^{\!6} \right] +
|
||||
\left[ 6\left( \frac{\sigma}{r_c} \right)^{\!12} -
|
||||
3\left(\frac{\sigma}{r_c}\right)^{\!6}\right]\left(\frac{r}{r_c}\right)^{\!2}
|
||||
- 7\left( \frac{\sigma}{r_c} \right)^{\!12} +
|
||||
4\left( \frac{\sigma}{r_c} \right)^{\!6}\right\} \\
|
||||
E_{qq} & = & \frac{q_i q_j}{r}\left(1-\frac{r}{r_c}\right)^{\!2} \\
|
||||
E_{pq} & = & E_{ji} = -\frac{q}{r^3} \left[ 1 -
|
||||
3\left(\frac{r}{r_c}\right)^{\!2} +
|
||||
2\left(\frac{r}{r_c}\right)^{\!3}\right] (\vec{p}\bullet\vec{r}) \\
|
||||
E_{qp} & = & E_{ij} = \frac{q}{r^3} \left[ 1 -
|
||||
3\left(\frac{r}{r_c}\right)^{\!2} +
|
||||
2\left(\frac{r}{r_c}\right)^{\!3}\right] (\vec{p}\bullet\vec{r}) \\
|
||||
E_{pp} & = & \left[1-4\left(\frac{r}{r_c}\right)^{\!3} +
|
||||
3\left(\frac{r}{r_c}\right)^{\!4}\right]\left[\frac{1}{r^3}
|
||||
(\vec{p_i} \bullet \vec{p_j}) - \frac{3}{r^5}
|
||||
(\vec{p_i} \bullet \vec{r}) (\vec{p_j} \bullet \vec{r})\right] \\
|
||||
\end{eqnarray*}
|
||||
|
||||
\begin{eqnarray*}
|
||||
F_{LJ} & = & \left\{\left[48\epsilon \left(\frac{\sigma}{r}\right)^{\!12} -
|
||||
24\epsilon \left(\frac{\sigma}{r}\right)^{\!6} \right]\frac{1}{r^2} -
|
||||
\left[48\epsilon \left(\frac{\sigma}{r_c}\right)^{\!12} - 24\epsilon
|
||||
\left(\frac{\sigma}{r_c}\right)^{\!6} \right]\frac{1}{r_c^2}\right\}\vec{r}\\
|
||||
F_{qq} & = & \frac{q_i q_j}{r}\left(\frac{1}{r^2} -
|
||||
\frac{1}{r_c^2}\right)\vec{r} \\
|
||||
F_{pq} &=& F_{ij } = -\frac{3q}{r^5} \left[ 1 -
|
||||
\left(\frac{r}{r_c}\right)^{\!2}\right](\vec{p}\bullet\vec{r})\vec{r} +
|
||||
\frac{q}{r^3}\left[1-3\left(\frac{r}{r_c}\right)^{\!2} +
|
||||
2\left(\frac{r}{r_c}\right)^{\!3}\right] \vec{p} \\
|
||||
F_{qp} &=& F_{ij} = \frac{3q}{r^5} \left[ 1 -
|
||||
\left(\frac{r}{r_c}\right)^{\!2}\right] (\vec{p}\bullet\vec{r})\vec{r} -
|
||||
\frac{q}{r^3}\left[1-3\left(\frac{r}{r_c}\right)^{\!2} +
|
||||
2\left(\frac{r}{r_c}\right)^{\!3}\right] \vec{p} \\
|
||||
F_{pp} & = &\frac{3}{r^5}\Bigg\{\left[1-\left(\frac{r}{r_c}\right)^{\!4}\right]
|
||||
\left[(\vec{p_i}\bullet\vec{p_j}) - \frac{3}{r^2} (\vec{p_i}\bullet\vec{r})
|
||||
(\vec{p_j} \bullet \vec{r})\right] \vec{r} + \\
|
||||
& & \left[1 -
|
||||
4\left(\frac{r}{r_c}\right)^{\!3}+3\left(\frac{r}{r_c}\right)^{\!4}\right]
|
||||
\left[ (\vec{p_j} \bullet \vec{r}) \vec{p_i} + (\vec{p_i} \bullet \vec{r})
|
||||
\vec{p_j} -\frac{2}{r^2} (\vec{p_i} \bullet \vec{r})
|
||||
(\vec{p_j} \bullet \vec{r})\vec{r}\right] \Bigg\} \\
|
||||
\end{eqnarray*}
|
||||
|
||||
\end{document}
|
||||
|
||||