Merge branch 'develop' into type-labels
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -3,6 +3,7 @@
|
|||||||
.github export-ignore
|
.github export-ignore
|
||||||
.lgtm.yml export-ignore
|
.lgtm.yml export-ignore
|
||||||
SECURITY.md export-ignore
|
SECURITY.md export-ignore
|
||||||
|
CITATION.cff export-ignore
|
||||||
* text=auto
|
* text=auto
|
||||||
*.jpg -text
|
*.jpg -text
|
||||||
*.pdf -text
|
*.pdf -text
|
||||||
|
|||||||
5
.github/CODEOWNERS
vendored
5
.github/CODEOWNERS
vendored
@ -13,20 +13,21 @@ lib/kim/* @ellio167
|
|||||||
lib/mesont/* @iafoss
|
lib/mesont/* @iafoss
|
||||||
|
|
||||||
# whole packages
|
# whole packages
|
||||||
|
src/AMOEBA/* @sjplimp
|
||||||
src/COMPRESS/* @rbberger
|
src/COMPRESS/* @rbberger
|
||||||
src/GPU/* @ndtrung81
|
src/GPU/* @ndtrung81
|
||||||
src/KOKKOS/* @stanmoore1
|
src/KOKKOS/* @stanmoore1
|
||||||
src/KIM/* @ellio167
|
src/KIM/* @ellio167
|
||||||
src/LATTE/* @cnegre
|
src/LATTE/* @cnegre
|
||||||
src/MESSAGE/* @sjplimp
|
|
||||||
src/MLIAP/* @athomps
|
src/MLIAP/* @athomps
|
||||||
src/SNAP/* @athomps
|
src/SNAP/* @athomps
|
||||||
src/SPIN/* @julient31
|
src/SPIN/* @julient31
|
||||||
src/BROWNIAN/* @samueljmcameron
|
src/BROWNIAN/* @samueljmcameron
|
||||||
src/CG-DNA/* @ohenrich
|
src/CG-DNA/* @ohenrich
|
||||||
src/CG-SDK/* @akohlmey
|
src/CG-SPICA/* @yskmiyazaki
|
||||||
src/COLVARS/* @giacomofiorin
|
src/COLVARS/* @giacomofiorin
|
||||||
src/DIELECTRIC/* @ndtrung81
|
src/DIELECTRIC/* @ndtrung81
|
||||||
|
src/ELECTRODE/* @ludwig-ahrens
|
||||||
src/FEP/* @agiliopadua
|
src/FEP/* @agiliopadua
|
||||||
src/ML-HDNNP/* @singraber
|
src/ML-HDNNP/* @singraber
|
||||||
src/INTEL/* @wmbrownintel
|
src/INTEL/* @wmbrownintel
|
||||||
|
|||||||
4
.github/CONTRIBUTING.md
vendored
4
.github/CONTRIBUTING.md
vendored
@ -5,8 +5,8 @@ Thank your for considering to contribute to the LAMMPS software project.
|
|||||||
The following is a set of guidelines as well as explanations of policies and work flows for contributing to the LAMMPS molecular dynamics software project. These guidelines focus on submitting issues or pull requests on the LAMMPS GitHub project.
|
The following is a set of guidelines as well as explanations of policies and work flows for contributing to the LAMMPS molecular dynamics software project. These guidelines focus on submitting issues or pull requests on the LAMMPS GitHub project.
|
||||||
|
|
||||||
Thus please also have a look at:
|
Thus please also have a look at:
|
||||||
* [The guide for submitting new features in the LAMMPS manual](https://lammps.sandia.gov/doc/Modify_contribute.html)
|
* [The guide for submitting new features in the LAMMPS manual](https://www.lammps.org/doc/Modify_contribute.html)
|
||||||
* [The guide on programming style and requirement in the LAMMPS manual](https://lammps.sandia.gov/doc/Modify_contribute.html)
|
* [The guide on programming style and requirement in the LAMMPS manual](https://www.lammps.org/doc/Modify_style.html)
|
||||||
* [The GitHub tutorial in the LAMMPS manual](http://lammps.sandia.gov/doc/Howto_github.html)
|
* [The GitHub tutorial in the LAMMPS manual](http://lammps.sandia.gov/doc/Howto_github.html)
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|||||||
6
.github/codecov.yml
vendored
6
.github/codecov.yml
vendored
@ -7,7 +7,7 @@ coverage:
|
|||||||
threshold: 10%
|
threshold: 10%
|
||||||
only_pulls: false
|
only_pulls: false
|
||||||
branches:
|
branches:
|
||||||
- "master"
|
- "develop"
|
||||||
flags:
|
flags:
|
||||||
- "unit"
|
- "unit"
|
||||||
paths:
|
paths:
|
||||||
@ -16,14 +16,14 @@ coverage:
|
|||||||
project:
|
project:
|
||||||
default:
|
default:
|
||||||
branches:
|
branches:
|
||||||
- "master"
|
- "develop"
|
||||||
paths:
|
paths:
|
||||||
- "src"
|
- "src"
|
||||||
informational: true
|
informational: true
|
||||||
patch:
|
patch:
|
||||||
default:
|
default:
|
||||||
branches:
|
branches:
|
||||||
- "master"
|
- "develop"
|
||||||
paths:
|
paths:
|
||||||
- "src"
|
- "src"
|
||||||
informational: true
|
informational: true
|
||||||
|
|||||||
6
.github/dependabot.yml
vendored
Normal file
6
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
15
.github/workflows/codeql-analysis.yml
vendored
15
.github/workflows/codeql-analysis.yml
vendored
@ -5,12 +5,19 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches: [develop]
|
branches: [develop]
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
name: Analyze
|
name: Analyze
|
||||||
if: ${{ github.repository == 'lammps/lammps' }}
|
if: ${{ github.repository == 'lammps/lammps' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
security-events: write
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@ -18,17 +25,17 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
|
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: '3.x'
|
python-version: '3.x'
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v1
|
uses: github/codeql-action/init@v2
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
config-file: ./.github/codeql/${{ matrix.language }}.yml
|
config-file: ./.github/codeql/${{ matrix.language }}.yml
|
||||||
@ -46,4 +53,4 @@ jobs:
|
|||||||
cmake --build . --parallel 2
|
cmake --build . --parallel 2
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v1
|
uses: github/codeql-action/analyze@v2
|
||||||
|
|||||||
7
.github/workflows/compile-msvc.yml
vendored
7
.github/workflows/compile-msvc.yml
vendored
@ -5,6 +5,8 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches: [develop]
|
branches: [develop]
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Windows Compilation Test
|
name: Windows Compilation Test
|
||||||
@ -13,12 +15,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
|
|
||||||
- name: Select Python version
|
- name: Select Python version
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: '3.10'
|
python-version: '3.10'
|
||||||
|
|
||||||
@ -26,6 +28,7 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
python3 -m pip install numpy
|
python3 -m pip install numpy
|
||||||
|
python3 -m pip install pyyaml
|
||||||
cmake -C cmake/presets/windows.cmake \
|
cmake -C cmake/presets/windows.cmake \
|
||||||
-D PKG_PYTHON=on \
|
-D PKG_PYTHON=on \
|
||||||
-S cmake -B build \
|
-S cmake -B build \
|
||||||
|
|||||||
7
.github/workflows/unittest-macos.yml
vendored
7
.github/workflows/unittest-macos.yml
vendored
@ -5,6 +5,8 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches: [develop]
|
branches: [develop]
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: MacOS Unit Test
|
name: MacOS Unit Test
|
||||||
@ -15,7 +17,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
|
|
||||||
@ -26,7 +28,7 @@ jobs:
|
|||||||
run: mkdir build
|
run: mkdir build
|
||||||
|
|
||||||
- name: Set up ccache
|
- name: Set up ccache
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
path: ${{ env.CCACHE_DIR }}
|
||||||
key: macos-ccache-${{ github.sha }}
|
key: macos-ccache-${{ github.sha }}
|
||||||
@ -37,6 +39,7 @@ jobs:
|
|||||||
working-directory: build
|
working-directory: build
|
||||||
run: |
|
run: |
|
||||||
ccache -z
|
ccache -z
|
||||||
|
python3 -m pip install pyyaml
|
||||||
cmake -C ../cmake/presets/clang.cmake \
|
cmake -C ../cmake/presets/clang.cmake \
|
||||||
-C ../cmake/presets/most.cmake \
|
-C ../cmake/presets/most.cmake \
|
||||||
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||||
|
|||||||
91
CITATION.cff
Normal file
91
CITATION.cff
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# YAML 1.2
|
||||||
|
---
|
||||||
|
cff-version: 1.2.0
|
||||||
|
title: "LAMMPS: Large-scale Atomic/Molecular Massively Parallel Simulator"
|
||||||
|
type: software
|
||||||
|
authors:
|
||||||
|
- family-names: "Plimpton"
|
||||||
|
given-names: "Steven J."
|
||||||
|
- family-names: "Kohlmeyer"
|
||||||
|
given-names: "Axel"
|
||||||
|
orcid: "https://orcid.org/0000-0001-6204-6475"
|
||||||
|
- family-names: "Thompson"
|
||||||
|
given-names: "Aidan P."
|
||||||
|
orcid: "https://orcid.org/0000-0002-0324-9114"
|
||||||
|
- family-names: "Moore"
|
||||||
|
given-names: "Stan G."
|
||||||
|
- family-names: "Berger"
|
||||||
|
given-names: "Richard"
|
||||||
|
orcid: "https://orcid.org/0000-0002-3044-8266"
|
||||||
|
doi: 10.5281/zenodo.3726416
|
||||||
|
license: GPL-2.0-only
|
||||||
|
url: https://www.lammps.org
|
||||||
|
repository-code: https://github.com/lammps/lammps/
|
||||||
|
keywords:
|
||||||
|
- "Molecular Dynamics"
|
||||||
|
- "Materials Modeling"
|
||||||
|
message: "If you are referencing LAMMPS in a publication, please cite the paper below."
|
||||||
|
preferred-citation:
|
||||||
|
type: article
|
||||||
|
doi: "10.1016/j.cpc.2021.108171"
|
||||||
|
url: "https://www.sciencedirect.com/science/article/pii/S0010465521002836"
|
||||||
|
authors:
|
||||||
|
- family-names: "Thompson"
|
||||||
|
given-names: "Aidan P."
|
||||||
|
orcid: "https://orcid.org/0000-0002-0324-9114"
|
||||||
|
- family-names: "Aktulga"
|
||||||
|
given-names: "H. Metin"
|
||||||
|
- family-names: "Berger"
|
||||||
|
given-names: "Richard"
|
||||||
|
orcid: "https://orcid.org/0000-0002-3044-8266"
|
||||||
|
- family-names: "Bolintineanu"
|
||||||
|
given-names: "Dan S."
|
||||||
|
- family-names: "Brown"
|
||||||
|
given-names: "W. Michael"
|
||||||
|
- family-names: "Crozier"
|
||||||
|
given-names: "Paul S."
|
||||||
|
- family-names: "in 't Veld"
|
||||||
|
given-names: "Pieter J."
|
||||||
|
- family-names: "Kohlmeyer"
|
||||||
|
given-names: "Axel"
|
||||||
|
orcid: "https://orcid.org/0000-0001-6204-6475"
|
||||||
|
- family-names: "Moore"
|
||||||
|
given-names: "Stan G."
|
||||||
|
- family-names: "Nguyen"
|
||||||
|
given-names: "Trung Dac"
|
||||||
|
- family-names: "Shan"
|
||||||
|
given-names: "Ray"
|
||||||
|
- family-names: "Stevens"
|
||||||
|
given-names: "Mark J."
|
||||||
|
- family-names: "Tranchida"
|
||||||
|
given-names: "Julien"
|
||||||
|
- family-names: "Trott"
|
||||||
|
given-names: "Christian"
|
||||||
|
- family-names: "Plimpton"
|
||||||
|
given-names: "Steven J."
|
||||||
|
title: "LAMMPS - a flexible simulation tool for particle-based materials modeling at the atomic, meso, and continuum scales"
|
||||||
|
journal: "Computer Physics Communications"
|
||||||
|
keywords:
|
||||||
|
- Molecular dynamics
|
||||||
|
- Materials modeling
|
||||||
|
- Parallel algorithms
|
||||||
|
- LAMMPS
|
||||||
|
month: 2
|
||||||
|
volume: 271
|
||||||
|
issn: 0010-4655
|
||||||
|
pages: 108171
|
||||||
|
year: 2022
|
||||||
|
references:
|
||||||
|
- title: "Fast Parallel Algorithms for Short-Range Molecular Dynamics"
|
||||||
|
type: article
|
||||||
|
journal: Journal of Computational Physics
|
||||||
|
volume: 117
|
||||||
|
number: 1
|
||||||
|
pages: "1-19"
|
||||||
|
year: 1995
|
||||||
|
issn: 0021-9991
|
||||||
|
doi: 10.1006/jcph.1995.1039
|
||||||
|
url: https://www.sciencedirect.com/science/article/pii/S002199918571039X
|
||||||
|
authors:
|
||||||
|
- family-names: "Plimpton"
|
||||||
|
given-names: "Steve"
|
||||||
@ -4,10 +4,8 @@ This directory contains 5 benchmark problems which are discussed in
|
|||||||
the Benchmark section of the LAMMPS documentation, and on the
|
the Benchmark section of the LAMMPS documentation, and on the
|
||||||
Benchmark page of the LAMMPS WWW site (https://www.lammps.org/bench.html).
|
Benchmark page of the LAMMPS WWW site (https://www.lammps.org/bench.html).
|
||||||
|
|
||||||
This directory also has several sub-directories:
|
This directory also has one sub-directories:
|
||||||
|
|
||||||
FERMI benchmark scripts for desktop machine with Fermi GPUs (Tesla)
|
|
||||||
KEPLER benchmark scripts for GPU cluster with Kepler GPUs
|
|
||||||
POTENTIALS benchmarks scripts for various potentials in LAMMPS
|
POTENTIALS benchmarks scripts for various potentials in LAMMPS
|
||||||
|
|
||||||
The results for all of these benchmarks are displayed and discussed on
|
The results for all of these benchmarks are displayed and discussed on
|
||||||
|
|||||||
615
cmake/CMakeLists.jpeg
Normal file
615
cmake/CMakeLists.jpeg
Normal file
@ -0,0 +1,615 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
# When using CMake 3.4 and later, don't export symbols from executables unless
|
||||||
|
# the CMAKE_ENABLE_EXPORTS variable is set.
|
||||||
|
if(POLICY CMP0065)
|
||||||
|
cmake_policy(SET CMP0065 NEW)
|
||||||
|
endif()
|
||||||
|
if (POLICY CMP0077)
|
||||||
|
cmake_policy(SET CMP0077 NEW)
|
||||||
|
endif()
|
||||||
|
if(CMAKE_EXECUTABLE_SUFFIX)
|
||||||
|
set(CMAKE_EXECUTABLE_SUFFIX_TMP ${CMAKE_EXECUTABLE_SUFFIX})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
project(libjpeg-turbo C)
|
||||||
|
set(VERSION 2.1.3)
|
||||||
|
set(COPYRIGHT_YEAR "1991-2022")
|
||||||
|
string(REPLACE "." ";" VERSION_TRIPLET ${VERSION})
|
||||||
|
list(GET VERSION_TRIPLET 0 VERSION_MAJOR)
|
||||||
|
list(GET VERSION_TRIPLET 1 VERSION_MINOR)
|
||||||
|
list(GET VERSION_TRIPLET 2 VERSION_REVISION)
|
||||||
|
function(pad_number NUMBER OUTPUT_LEN)
|
||||||
|
string(LENGTH "${${NUMBER}}" INPUT_LEN)
|
||||||
|
if(INPUT_LEN LESS OUTPUT_LEN)
|
||||||
|
math(EXPR ZEROES "${OUTPUT_LEN} - ${INPUT_LEN} - 1")
|
||||||
|
set(NUM ${${NUMBER}})
|
||||||
|
foreach(C RANGE ${ZEROES})
|
||||||
|
set(NUM "0${NUM}")
|
||||||
|
endforeach()
|
||||||
|
set(${NUMBER} ${NUM} PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
pad_number(VERSION_MINOR 3)
|
||||||
|
pad_number(VERSION_REVISION 3)
|
||||||
|
set(LIBJPEG_TURBO_VERSION_NUMBER ${VERSION_MAJOR}${VERSION_MINOR}${VERSION_REVISION})
|
||||||
|
|
||||||
|
# CMake 3.14 and later sets CMAKE_MACOSX_BUNDLE to TRUE by default when
|
||||||
|
# CMAKE_SYSTEM_NAME is iOS, tvOS, or watchOS, which breaks the libjpeg-turbo
|
||||||
|
# build. (Specifically, when CMAKE_MACOSX_BUNDLE is TRUE, executables for
|
||||||
|
# Apple platforms are built as application bundles, which causes CMake to
|
||||||
|
# complain that our install() directives for executables do not specify a
|
||||||
|
# BUNDLE DESTINATION. Even if CMake did not complain, building executables as
|
||||||
|
# application bundles would break our iOS packages.)
|
||||||
|
set(CMAKE_MACOSX_BUNDLE FALSE)
|
||||||
|
|
||||||
|
string(TIMESTAMP DEFAULT_BUILD "%Y%m%d")
|
||||||
|
set(BUILD ${DEFAULT_BUILD} CACHE STRING "Build string (default: ${DEFAULT_BUILD})")
|
||||||
|
|
||||||
|
# NOTE: On Windows, this does nothing except when using MinGW or Cygwin.
|
||||||
|
# CMAKE_BUILD_TYPE has no meaning in Visual Studio, and it always defaults to
|
||||||
|
# Debug when using NMake.
|
||||||
|
if(NOT CMAKE_BUILD_TYPE)
|
||||||
|
set(CMAKE_BUILD_TYPE Release)
|
||||||
|
endif()
|
||||||
|
message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
|
||||||
|
|
||||||
|
message(STATUS "VERSION = ${VERSION}, BUILD = ${BUILD}")
|
||||||
|
|
||||||
|
include(cmakescripts/PackageInfo.cmake)
|
||||||
|
|
||||||
|
# Detect CPU type and whether we're building 64-bit or 32-bit code
|
||||||
|
math(EXPR BITS "${CMAKE_SIZEOF_VOID_P} * 8")
|
||||||
|
string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR_LC)
|
||||||
|
set(COUNT 1)
|
||||||
|
foreach(ARCH ${CMAKE_OSX_ARCHITECTURES})
|
||||||
|
if(COUNT GREATER 1)
|
||||||
|
message(FATAL_ERROR "The libjpeg-turbo build system does not support multiple values in CMAKE_OSX_ARCHITECTURES.")
|
||||||
|
endif()
|
||||||
|
math(EXPR COUNT "${COUNT}+1")
|
||||||
|
endforeach()
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86_64" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "amd64" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "i[0-9]86" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "ia32")
|
||||||
|
if(BITS EQUAL 64 OR CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
|
||||||
|
set(CPU_TYPE x86_64)
|
||||||
|
else()
|
||||||
|
set(CPU_TYPE i386)
|
||||||
|
endif()
|
||||||
|
if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL ${CPU_TYPE})
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR ${CPU_TYPE})
|
||||||
|
endif()
|
||||||
|
elseif(CMAKE_SYSTEM_PROCESSOR_LC STREQUAL "aarch64" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^arm")
|
||||||
|
if(BITS EQUAL 64)
|
||||||
|
set(CPU_TYPE arm64)
|
||||||
|
else()
|
||||||
|
set(CPU_TYPE arm)
|
||||||
|
endif()
|
||||||
|
elseif(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^ppc" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^powerpc")
|
||||||
|
set(CPU_TYPE powerpc)
|
||||||
|
else()
|
||||||
|
set(CPU_TYPE ${CMAKE_SYSTEM_PROCESSOR_LC})
|
||||||
|
endif()
|
||||||
|
if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR
|
||||||
|
CMAKE_OSX_ARCHITECTURES MATCHES "arm64" OR
|
||||||
|
CMAKE_OSX_ARCHITECTURES MATCHES "i386")
|
||||||
|
set(CPU_TYPE ${CMAKE_OSX_ARCHITECTURES})
|
||||||
|
endif()
|
||||||
|
if(CMAKE_OSX_ARCHITECTURES MATCHES "ppc")
|
||||||
|
set(CPU_TYPE powerpc)
|
||||||
|
endif()
|
||||||
|
if(MSVC_IDE AND CMAKE_GENERATOR_PLATFORM MATCHES "arm64")
|
||||||
|
set(CPU_TYPE arm64)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "${BITS}-bit build (${CPU_TYPE})")
|
||||||
|
|
||||||
|
macro(report_directory var)
|
||||||
|
if(CMAKE_INSTALL_${var} STREQUAL CMAKE_INSTALL_FULL_${var})
|
||||||
|
message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}}")
|
||||||
|
else()
|
||||||
|
message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}} (${CMAKE_INSTALL_FULL_${var}})")
|
||||||
|
endif()
|
||||||
|
mark_as_advanced(CLEAR CMAKE_INSTALL_${var})
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
set(DIRLIST "BINDIR;DATAROOTDIR;DOCDIR;INCLUDEDIR;LIBDIR")
|
||||||
|
if(UNIX)
|
||||||
|
list(APPEND DIRLIST "MANDIR")
|
||||||
|
endif()
|
||||||
|
foreach(dir ${DIRLIST})
|
||||||
|
report_directory(${dir})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# CONFIGURATION OPTIONS
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
macro(boolean_number var)
|
||||||
|
if(${var})
|
||||||
|
set(${var} 1 ${ARGN})
|
||||||
|
else()
|
||||||
|
set(${var} 0 ${ARGN})
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
option(ENABLE_SHARED "Build shared libraries" FALSE)
|
||||||
|
boolean_number(ENABLE_SHARED)
|
||||||
|
option(ENABLE_STATIC "Build static libraries" TRUE)
|
||||||
|
boolean_number(ENABLE_STATIC)
|
||||||
|
option(REQUIRE_SIMD "Generate a fatal error if SIMD extensions are not available for this platform (default is to fall back to a non-SIMD build)" FALSE)
|
||||||
|
boolean_number(REQUIRE_SIMD)
|
||||||
|
option(WITH_12BIT "Encode/decode JPEG images with 12-bit samples (implies WITH_ARITH_DEC=0 WITH_ARITH_ENC=0 WITH_JAVA=0 WITH_SIMD=0 WITH_TURBOJPEG=0 )" FALSE)
|
||||||
|
boolean_number(WITH_12BIT)
|
||||||
|
option(WITH_ARITH_DEC "Include arithmetic decoding support when emulating the libjpeg v6b API/ABI" TRUE)
|
||||||
|
boolean_number(WITH_ARITH_DEC)
|
||||||
|
option(WITH_ARITH_ENC "Include arithmetic encoding support when emulating the libjpeg v6b API/ABI" TRUE)
|
||||||
|
boolean_number(WITH_ARITH_ENC)
|
||||||
|
if(CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
|
||||||
|
set(WITH_JAVA 0)
|
||||||
|
else()
|
||||||
|
option(WITH_JAVA "Build Java wrapper for the TurboJPEG API library (implies ENABLE_SHARED=1)" FALSE)
|
||||||
|
boolean_number(WITH_JAVA)
|
||||||
|
endif()
|
||||||
|
option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
|
||||||
|
boolean_number(WITH_JPEG7)
|
||||||
|
option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
|
||||||
|
boolean_number(WITH_JPEG8)
|
||||||
|
option(WITH_MEM_SRCDST "Include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI" TRUE)
|
||||||
|
boolean_number(WITH_MEM_SRCDST)
|
||||||
|
option(WITH_SIMD "Include SIMD extensions, if available for this platform" FALSE)
|
||||||
|
boolean_number(WITH_SIMD)
|
||||||
|
option(WITH_TURBOJPEG "Include the TurboJPEG API library and associated test programs" FALSE)
|
||||||
|
boolean_number(WITH_TURBOJPEG)
|
||||||
|
option(WITH_FUZZ "Build fuzz targets" FALSE)
|
||||||
|
|
||||||
|
macro(report_option var desc)
|
||||||
|
if(${var})
|
||||||
|
message(STATUS "${desc} enabled (${var} = ${${var}})")
|
||||||
|
else()
|
||||||
|
message(STATUS "${desc} disabled (${var} = ${${var}})")
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
if(WITH_JAVA)
|
||||||
|
set(ENABLE_SHARED 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Explicitly setting CMAKE_POSITION_INDEPENDENT_CODE=FALSE disables PIC for all
|
||||||
|
# targets, which will cause the shared library builds to fail. Thus, if shared
|
||||||
|
# libraries are enabled and CMAKE_POSITION_INDEPENDENT_CODE is explicitly set
|
||||||
|
# to FALSE, we need to unset it, thus restoring the default behavior
|
||||||
|
# (automatically using PIC for shared library targets.)
|
||||||
|
if(DEFINED CMAKE_POSITION_INDEPENDENT_CODE AND
|
||||||
|
NOT CMAKE_POSITION_INDEPENDENT_CODE AND ENABLE_SHARED)
|
||||||
|
unset(CMAKE_POSITION_INDEPENDENT_CODE CACHE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
report_option(ENABLE_SHARED "Shared libraries")
|
||||||
|
report_option(ENABLE_STATIC "Static libraries")
|
||||||
|
|
||||||
|
if(ENABLE_SHARED)
|
||||||
|
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_JPEG8 OR WITH_JPEG7)
|
||||||
|
set(WITH_ARITH_ENC 1)
|
||||||
|
set(WITH_ARITH_DEC 1)
|
||||||
|
endif()
|
||||||
|
if(WITH_JPEG8)
|
||||||
|
set(WITH_MEM_SRCDST 0)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_12BIT)
|
||||||
|
set(WITH_ARITH_DEC 0)
|
||||||
|
set(WITH_ARITH_ENC 0)
|
||||||
|
set(WITH_JAVA 0)
|
||||||
|
set(WITH_SIMD 0)
|
||||||
|
set(WITH_TURBOJPEG 0)
|
||||||
|
set(BITS_IN_JSAMPLE 12)
|
||||||
|
else()
|
||||||
|
set(BITS_IN_JSAMPLE 8)
|
||||||
|
endif()
|
||||||
|
report_option(WITH_12BIT "12-bit JPEG support")
|
||||||
|
|
||||||
|
if(WITH_ARITH_DEC)
|
||||||
|
set(D_ARITH_CODING_SUPPORTED 1)
|
||||||
|
endif()
|
||||||
|
if(NOT WITH_12BIT)
|
||||||
|
report_option(WITH_ARITH_DEC "Arithmetic decoding support")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_ARITH_ENC)
|
||||||
|
set(C_ARITH_CODING_SUPPORTED 1)
|
||||||
|
endif()
|
||||||
|
if(NOT WITH_12BIT)
|
||||||
|
report_option(WITH_ARITH_ENC "Arithmetic encoding support")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT WITH_12BIT)
|
||||||
|
report_option(WITH_TURBOJPEG "TurboJPEG API library")
|
||||||
|
report_option(WITH_JAVA "TurboJPEG Java wrapper")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_MEM_SRCDST)
|
||||||
|
set(MEM_SRCDST_SUPPORTED 1)
|
||||||
|
set(MEM_SRCDST_FUNCTIONS "global: jpeg_mem_dest; jpeg_mem_src;")
|
||||||
|
endif()
|
||||||
|
if(NOT WITH_JPEG8)
|
||||||
|
report_option(WITH_MEM_SRCDST "In-memory source/destination managers")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(SO_AGE 2)
|
||||||
|
if(WITH_MEM_SRCDST)
|
||||||
|
set(SO_AGE 3)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_JPEG8)
|
||||||
|
set(JPEG_LIB_VERSION 80)
|
||||||
|
elseif(WITH_JPEG7)
|
||||||
|
set(JPEG_LIB_VERSION 70)
|
||||||
|
else()
|
||||||
|
set(JPEG_LIB_VERSION 62)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
math(EXPR JPEG_LIB_VERSION_DIV10 "${JPEG_LIB_VERSION} / 10")
|
||||||
|
math(EXPR JPEG_LIB_VERSION_MOD10 "${JPEG_LIB_VERSION} % 10")
|
||||||
|
if(JPEG_LIB_VERSION STREQUAL "62")
|
||||||
|
set(DEFAULT_SO_MAJOR_VERSION ${JPEG_LIB_VERSION})
|
||||||
|
else()
|
||||||
|
set(DEFAULT_SO_MAJOR_VERSION ${JPEG_LIB_VERSION_DIV10})
|
||||||
|
endif()
|
||||||
|
if(JPEG_LIB_VERSION STREQUAL "80")
|
||||||
|
set(DEFAULT_SO_MINOR_VERSION 2)
|
||||||
|
else()
|
||||||
|
set(DEFAULT_SO_MINOR_VERSION 0)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# This causes SO_MAJOR_VERSION/SO_MINOR_VERSION to reset to defaults if
|
||||||
|
# WITH_JPEG7 or WITH_JPEG8 has changed.
|
||||||
|
if((DEFINED WITH_JPEG7_INT AND NOT WITH_JPEG7 EQUAL WITH_JPEG7_INT) OR
|
||||||
|
(DEFINED WITH_JPEG8_INT AND NOT WITH_JPEG8 EQUAL WITH_JPEG8_INT))
|
||||||
|
set(FORCE_SO_VERSION "FORCE")
|
||||||
|
endif()
|
||||||
|
set(WITH_JPEG7_INT ${WITH_JPEG7} CACHE INTERNAL "")
|
||||||
|
set(WITH_JPEG8_INT ${WITH_JPEG8} CACHE INTERNAL "")
|
||||||
|
|
||||||
|
set(SO_MAJOR_VERSION ${DEFAULT_SO_MAJOR_VERSION} CACHE STRING
|
||||||
|
"Major version of the libjpeg API shared library (default: ${DEFAULT_SO_MAJOR_VERSION})"
|
||||||
|
${FORCE_SO_VERSION})
|
||||||
|
set(SO_MINOR_VERSION ${DEFAULT_SO_MINOR_VERSION} CACHE STRING
|
||||||
|
"Minor version of the libjpeg API shared library (default: ${DEFAULT_SO_MINOR_VERSION})"
|
||||||
|
${FORCE_SO_VERSION})
|
||||||
|
|
||||||
|
set(JPEG_LIB_VERSION_DECIMAL "${JPEG_LIB_VERSION_DIV10}.${JPEG_LIB_VERSION_MOD10}")
|
||||||
|
message(STATUS "Emulating libjpeg API/ABI v${JPEG_LIB_VERSION_DECIMAL} (WITH_JPEG7 = ${WITH_JPEG7}, WITH_JPEG8 = ${WITH_JPEG8})")
|
||||||
|
message(STATUS "libjpeg API shared library version = ${SO_MAJOR_VERSION}.${SO_AGE}.${SO_MINOR_VERSION}")
|
||||||
|
|
||||||
|
# Because the TurboJPEG API library uses versioned symbols and changes the
|
||||||
|
# names of functions whenever they are modified in a backward-incompatible
|
||||||
|
# manner, it is always backward-ABI-compatible with itself, so the major and
|
||||||
|
# minor SO versions don't change. However, we increase the middle number (the
|
||||||
|
# SO "age") whenever functions are added to the API.
|
||||||
|
set(TURBOJPEG_SO_MAJOR_VERSION 0)
|
||||||
|
set(TURBOJPEG_SO_AGE 2)
|
||||||
|
set(TURBOJPEG_SO_VERSION 0.${TURBOJPEG_SO_AGE}.0)
|
||||||
|
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# COMPILER SETTINGS
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
option(WITH_CRT_DLL
|
||||||
|
"Link all ${CMAKE_PROJECT_NAME} libraries and executables with the C run-time DLL (msvcr*.dll) instead of the static C run-time library (libcmt*.lib.) The default is to use the C run-time DLL only with the libraries and executables that need it."
|
||||||
|
FALSE)
|
||||||
|
if(NOT WITH_CRT_DLL)
|
||||||
|
# Use the static C library for all build types
|
||||||
|
foreach(var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
||||||
|
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
|
||||||
|
if(${var} MATCHES "/MD")
|
||||||
|
string(REGEX REPLACE "/MD" "/MT" ${var} "${${var}}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
add_definitions(-D_CRT_NONSTDC_NO_WARNINGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||||
|
# Use the maximum optimization level for release builds
|
||||||
|
foreach(var CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO)
|
||||||
|
if(${var} MATCHES "-O2")
|
||||||
|
string(REGEX REPLACE "-O2" "-O3" ${var} "${${var}}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
|
||||||
|
if(CMAKE_C_COMPILER_ID MATCHES "SunPro")
|
||||||
|
# Use the maximum optimization level for release builds
|
||||||
|
foreach(var CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO)
|
||||||
|
if(${var} MATCHES "-xO3")
|
||||||
|
string(REGEX REPLACE "-xO3" "-xO5" ${var} "${${var}}")
|
||||||
|
endif()
|
||||||
|
if(${var} MATCHES "-xO2")
|
||||||
|
string(REGEX REPLACE "-xO2" "-xO5" ${var} "${${var}}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
|
||||||
|
|
||||||
|
set(EFFECTIVE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
|
||||||
|
message(STATUS "Compiler flags = ${EFFECTIVE_C_FLAGS}")
|
||||||
|
|
||||||
|
set(EFFECTIVE_LD_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
|
||||||
|
message(STATUS "Linker flags = ${EFFECTIVE_LD_FLAGS}")
|
||||||
|
|
||||||
|
include(CheckCSourceCompiles)
|
||||||
|
include(CheckIncludeFiles)
|
||||||
|
include(CheckTypeSize)
|
||||||
|
|
||||||
|
check_type_size("size_t" SIZE_T)
|
||||||
|
check_type_size("unsigned long" UNSIGNED_LONG)
|
||||||
|
|
||||||
|
if(SIZE_T EQUAL UNSIGNED_LONG)
|
||||||
|
check_c_source_compiles("int main(int argc, char **argv) { unsigned long a = argc; return __builtin_ctzl(a); }"
|
||||||
|
HAVE_BUILTIN_CTZL)
|
||||||
|
endif()
|
||||||
|
if(MSVC)
|
||||||
|
check_include_files("intrin.h" HAVE_INTRIN_H)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(UNIX)
|
||||||
|
if(CMAKE_CROSSCOMPILING)
|
||||||
|
set(RIGHT_SHIFT_IS_UNSIGNED 0)
|
||||||
|
else()
|
||||||
|
include(CheckCSourceRuns)
|
||||||
|
check_c_source_runs("
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
int is_shifting_signed (long arg) {
|
||||||
|
long res = arg >> 4;
|
||||||
|
if (res == -0x7F7E80CL)
|
||||||
|
return 1; /* right shift is signed */
|
||||||
|
/* see if unsigned-shift hack will fix it. */
|
||||||
|
/* we can't just test exact value since it depends on width of long... */
|
||||||
|
res |= (~0L) << (32-4);
|
||||||
|
if (res == -0x7F7E80CL)
|
||||||
|
return 0; /* right shift is unsigned */
|
||||||
|
printf(\"Right shift isn't acting as I expect it to.\\\\n\");
|
||||||
|
printf(\"I fear the JPEG software will not work at all.\\\\n\\\\n\");
|
||||||
|
return 0; /* try it with unsigned anyway */
|
||||||
|
}
|
||||||
|
int main (void) {
|
||||||
|
exit(is_shifting_signed(-0x7F7E80B1L));
|
||||||
|
}" RIGHT_SHIFT_IS_UNSIGNED)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
set(INLINE_OPTIONS "__inline;inline")
|
||||||
|
else()
|
||||||
|
set(INLINE_OPTIONS "__inline__;inline")
|
||||||
|
endif()
|
||||||
|
option(FORCE_INLINE "Force function inlining" TRUE)
|
||||||
|
boolean_number(FORCE_INLINE)
|
||||||
|
if(FORCE_INLINE)
|
||||||
|
if(MSVC)
|
||||||
|
list(INSERT INLINE_OPTIONS 0 "__forceinline")
|
||||||
|
else()
|
||||||
|
list(INSERT INLINE_OPTIONS 0 "inline __attribute__((always_inline))")
|
||||||
|
list(INSERT INLINE_OPTIONS 0 "__inline__ __attribute__((always_inline))")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
foreach(inline ${INLINE_OPTIONS})
|
||||||
|
check_c_source_compiles("${inline} static int foo(void) { return 0; } int main(void) { return foo(); }"
|
||||||
|
INLINE_WORKS)
|
||||||
|
if(INLINE_WORKS)
|
||||||
|
set(INLINE ${inline})
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
if(NOT INLINE_WORKS)
|
||||||
|
message(FATAL_ERROR "Could not determine how to inline functions.")
|
||||||
|
endif()
|
||||||
|
message(STATUS "INLINE = ${INLINE} (FORCE_INLINE = ${FORCE_INLINE})")
|
||||||
|
|
||||||
|
if(WITH_TURBOJPEG)
|
||||||
|
if(MSVC)
|
||||||
|
set(THREAD_LOCAL "__declspec(thread)")
|
||||||
|
else()
|
||||||
|
set(THREAD_LOCAL "__thread")
|
||||||
|
endif()
|
||||||
|
check_c_source_compiles("${THREAD_LOCAL} int i; int main(void) { i = 0; return i; }" HAVE_THREAD_LOCAL)
|
||||||
|
if(HAVE_THREAD_LOCAL)
|
||||||
|
message(STATUS "THREAD_LOCAL = ${THREAD_LOCAL}")
|
||||||
|
else()
|
||||||
|
message(WARNING "Thread-local storage is not available. The TurboJPEG API library's global error handler will not be thread-safe.")
|
||||||
|
unset(THREAD_LOCAL)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(UNIX AND NOT APPLE)
|
||||||
|
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map "VERS_1 { global: *; };")
|
||||||
|
set(CMAKE_REQUIRED_FLAGS
|
||||||
|
"-Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
|
||||||
|
check_c_source_compiles("int main(void) { return 0; }" HAVE_VERSION_SCRIPT)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS)
|
||||||
|
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map)
|
||||||
|
if(HAVE_VERSION_SCRIPT)
|
||||||
|
message(STATUS "Linker supports GNU-style version scripts")
|
||||||
|
set(MAPFLAG "-Wl,--version-script,")
|
||||||
|
set(TJMAPFLAG "-Wl,--version-script,")
|
||||||
|
else()
|
||||||
|
message(STATUS "Linker does not support GNU-style version scripts")
|
||||||
|
if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
|
||||||
|
# The Solaris linker doesn't like our version script for the libjpeg API
|
||||||
|
# library, but the version script for the TurboJPEG API library should
|
||||||
|
# still work.
|
||||||
|
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map
|
||||||
|
"VERS_1 { global: foo; local: *; }; VERS_2 { global: foo2; } VERS_1;")
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "-Wl,-M,${CMAKE_CURRENT_BINARY_DIR}/conftest.map -shared")
|
||||||
|
check_c_source_compiles("int foo() { return 0; } int foo2() { return 2; }"
|
||||||
|
HAVE_MAPFILE)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS)
|
||||||
|
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map)
|
||||||
|
if(HAVE_MAPFILE)
|
||||||
|
message(STATUS "Linker supports mapfiles")
|
||||||
|
set(TJMAPFLAG "-Wl,-M,")
|
||||||
|
else()
|
||||||
|
message(STATUS "Linker does not support mapfiles")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Generate files
|
||||||
|
if(WIN32)
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win/jconfig.h.in jconfig.h)
|
||||||
|
else()
|
||||||
|
configure_file(jconfig.h.in jconfig.h)
|
||||||
|
endif()
|
||||||
|
configure_file(jconfigint.h.in jconfigint.h)
|
||||||
|
configure_file(jversion.h.in jversion.h)
|
||||||
|
if(UNIX)
|
||||||
|
configure_file(libjpeg.map.in libjpeg.map)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Include directories and compiler definitions
|
||||||
|
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# TARGETS
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
if(CMAKE_EXECUTABLE_SUFFIX_TMP)
|
||||||
|
set(CMAKE_EXECUTABLE_SUFFIX ${CMAKE_EXECUTABLE_SUFFIX_TMP})
|
||||||
|
endif()
|
||||||
|
message(STATUS "CMAKE_EXECUTABLE_SUFFIX = ${CMAKE_EXECUTABLE_SUFFIX}")
|
||||||
|
|
||||||
|
set(JPEG_SOURCES jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c
|
||||||
|
jcicc.c jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c
|
||||||
|
jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c jdatadst.c
|
||||||
|
jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c jdicc.c jdinput.c
|
||||||
|
jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c jdpostct.c jdsample.c
|
||||||
|
jdtrans.c jerror.c jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c
|
||||||
|
jidctint.c jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c)
|
||||||
|
|
||||||
|
if(WITH_ARITH_ENC OR WITH_ARITH_DEC)
|
||||||
|
set(JPEG_SOURCES ${JPEG_SOURCES} jaricom.c)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_ARITH_ENC)
|
||||||
|
set(JPEG_SOURCES ${JPEG_SOURCES} jcarith.c)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_ARITH_DEC)
|
||||||
|
set(JPEG_SOURCES ${JPEG_SOURCES} jdarith.c)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_SIMD)
|
||||||
|
add_subdirectory(simd)
|
||||||
|
if(NEON_INTRINSICS)
|
||||||
|
add_definitions(-DNEON_INTRINSICS)
|
||||||
|
endif()
|
||||||
|
elseif(NOT WITH_12BIT)
|
||||||
|
message(STATUS "SIMD extensions: None (WITH_SIMD = ${WITH_SIMD})")
|
||||||
|
endif()
|
||||||
|
if(WITH_SIMD)
|
||||||
|
message(STATUS "SIMD extensions: ${CPU_TYPE} (WITH_SIMD = ${WITH_SIMD})")
|
||||||
|
if(MSVC_IDE OR XCODE)
|
||||||
|
set_source_files_properties(${SIMD_OBJS} PROPERTIES GENERATED 1)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_library(simd OBJECT jsimd_none.c)
|
||||||
|
if(NOT WIN32 AND (CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED))
|
||||||
|
set_target_properties(simd PROPERTIES POSITION_INDEPENDENT_CODE 1)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_JAVA)
|
||||||
|
add_subdirectory(java)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ENABLE_SHARED)
|
||||||
|
add_subdirectory(sharedlib)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ENABLE_STATIC)
|
||||||
|
add_library(jpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
|
||||||
|
${SIMD_OBJS})
|
||||||
|
if(NOT MSVC)
|
||||||
|
set_target_properties(jpeg-static PROPERTIES OUTPUT_NAME jpeg)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_TURBOJPEG)
|
||||||
|
if(ENABLE_SHARED)
|
||||||
|
set(TURBOJPEG_SOURCES ${JPEG_SOURCES} $<TARGET_OBJECTS:simd> ${SIMD_OBJS}
|
||||||
|
turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c rdbmp.c rdppm.c
|
||||||
|
wrbmp.c wrppm.c)
|
||||||
|
set(TJMAPFILE ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg-mapfile)
|
||||||
|
if(WITH_JAVA)
|
||||||
|
set(TURBOJPEG_SOURCES ${TURBOJPEG_SOURCES} turbojpeg-jni.c)
|
||||||
|
include_directories(${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
|
||||||
|
set(TJMAPFILE ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg-mapfile.jni)
|
||||||
|
endif()
|
||||||
|
if(MSVC)
|
||||||
|
configure_file(${CMAKE_SOURCE_DIR}/win/turbojpeg.rc.in
|
||||||
|
${CMAKE_BINARY_DIR}/win/turbojpeg.rc)
|
||||||
|
set(TURBOJPEG_SOURCES ${TURBOJPEG_SOURCES}
|
||||||
|
${CMAKE_BINARY_DIR}/win/turbojpeg.rc)
|
||||||
|
endif()
|
||||||
|
add_library(turbojpeg SHARED ${TURBOJPEG_SOURCES})
|
||||||
|
set_property(TARGET turbojpeg PROPERTY COMPILE_FLAGS
|
||||||
|
"-DBMP_SUPPORTED -DPPM_SUPPORTED")
|
||||||
|
if(WIN32)
|
||||||
|
set_target_properties(turbojpeg PROPERTIES DEFINE_SYMBOL DLLDEFINE)
|
||||||
|
endif()
|
||||||
|
if(MINGW)
|
||||||
|
set_target_properties(turbojpeg PROPERTIES LINK_FLAGS -Wl,--kill-at)
|
||||||
|
endif()
|
||||||
|
if(APPLE AND (NOT CMAKE_OSX_DEPLOYMENT_TARGET OR
|
||||||
|
CMAKE_OSX_DEPLOYMENT_TARGET VERSION_GREATER 10.4))
|
||||||
|
if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG)
|
||||||
|
set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
|
||||||
|
endif()
|
||||||
|
set_target_properties(turbojpeg PROPERTIES MACOSX_RPATH 1)
|
||||||
|
endif()
|
||||||
|
set_target_properties(turbojpeg PROPERTIES
|
||||||
|
SOVERSION ${TURBOJPEG_SO_MAJOR_VERSION} VERSION ${TURBOJPEG_SO_VERSION})
|
||||||
|
if(TJMAPFLAG)
|
||||||
|
set_target_properties(turbojpeg PROPERTIES
|
||||||
|
LINK_FLAGS "${TJMAPFLAG}${TJMAPFILE}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ENABLE_STATIC)
|
||||||
|
add_library(turbojpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
|
||||||
|
${SIMD_OBJS} turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c rdbmp.c
|
||||||
|
rdppm.c wrbmp.c wrppm.c)
|
||||||
|
set_property(TARGET turbojpeg-static PROPERTY COMPILE_FLAGS
|
||||||
|
"-DBMP_SUPPORTED -DPPM_SUPPORTED")
|
||||||
|
if(NOT MSVC)
|
||||||
|
set_target_properties(turbojpeg-static PROPERTIES OUTPUT_NAME turbojpeg)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
set(USE_SETMODE "-DUSE_SETMODE")
|
||||||
|
endif()
|
||||||
|
if(WITH_12BIT)
|
||||||
|
set(COMPILE_FLAGS "-DGIF_SUPPORTED -DPPM_SUPPORTED ${USE_SETMODE}")
|
||||||
|
else()
|
||||||
|
set(COMPILE_FLAGS "-DBMP_SUPPORTED -DGIF_SUPPORTED -DPPM_SUPPORTED -DTARGA_SUPPORTED ${USE_SETMODE}")
|
||||||
|
set(CJPEG_BMP_SOURCES rdbmp.c rdtarga.c)
|
||||||
|
set(DJPEG_BMP_SOURCES wrbmp.c wrtarga.c)
|
||||||
|
endif()
|
||||||
741
cmake/CMakeLists.png
Normal file
741
cmake/CMakeLists.png
Normal file
@ -0,0 +1,741 @@
|
|||||||
|
# CMakeLists.txt
|
||||||
|
|
||||||
|
# Copyright (C) 2018 Cosmin Truta
|
||||||
|
# Copyright (C) 2007,2009-2018 Glenn Randers-Pehrson
|
||||||
|
# Written by Christian Ehrlicher, 2007
|
||||||
|
# Revised by Roger Lowman, 2009-2010
|
||||||
|
# Revised by Clifford Yapp, 2011-2012,2017
|
||||||
|
# Revised by Roger Leigh, 2016
|
||||||
|
# Revised by Andreas Franek, 2016
|
||||||
|
# Revised by Sam Serrels, 2017
|
||||||
|
# Revised by Vadim Barkov, 2017
|
||||||
|
# Revised by Vicky Pfau, 2018
|
||||||
|
# Revised by Cameron Cawley, 2018
|
||||||
|
# Revised by Cosmin Truta, 2018
|
||||||
|
# Revised by Kyle Bentley, 2018
|
||||||
|
|
||||||
|
# This code is released under the libpng license.
|
||||||
|
# For conditions of distribution and use, see the disclaimer
|
||||||
|
# and license in png.h
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
cmake_policy(VERSION 3.1)
|
||||||
|
# When using CMake 3.4 and later, don't export symbols from executables unless
|
||||||
|
# the CMAKE_ENABLE_EXPORTS variable is set.
|
||||||
|
if(POLICY CMP0065)
|
||||||
|
cmake_policy(SET CMP0065 NEW)
|
||||||
|
endif()
|
||||||
|
if (POLICY CMP0077)
|
||||||
|
cmake_policy(SET CMP0077 NEW)
|
||||||
|
endif()
|
||||||
|
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
|
||||||
|
|
||||||
|
project(libpng C ASM)
|
||||||
|
enable_testing()
|
||||||
|
|
||||||
|
set(PNGLIB_MAJOR 1)
|
||||||
|
set(PNGLIB_MINOR 6)
|
||||||
|
set(PNGLIB_RELEASE 37)
|
||||||
|
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
|
||||||
|
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
|
||||||
|
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
|
# needed packages
|
||||||
|
|
||||||
|
# Allow users to specify location of Zlib.
|
||||||
|
# Useful if zlib is being built alongside this as a sub-project.
|
||||||
|
option(PNG_BUILD_ZLIB "Custom zlib Location, else find_package is used" ON)
|
||||||
|
|
||||||
|
if(NOT PNG_BUILD_ZLIB)
|
||||||
|
find_package(ZLIB REQUIRED)
|
||||||
|
include_directories(${ZLIB_INCLUDE_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(UNIX AND NOT APPLE AND NOT BEOS AND NOT HAIKU)
|
||||||
|
find_library(M_LIBRARY m)
|
||||||
|
else()
|
||||||
|
# libm is not needed and/or not available
|
||||||
|
set(M_LIBRARY "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# COMMAND LINE OPTIONS
|
||||||
|
option(PNG_SHARED "Build shared lib" OFF)
|
||||||
|
option(PNG_STATIC "Build static lib" ON)
|
||||||
|
option(PNG_TESTS "Build libpng tests" OFF)
|
||||||
|
|
||||||
|
# Many more configuration options could be added here
|
||||||
|
option(PNG_FRAMEWORK "Build OS X framework" OFF)
|
||||||
|
option(PNG_DEBUG "Build with debug output" OFF)
|
||||||
|
option(PNG_HARDWARE_OPTIMIZATIONS "Enable hardware optimizations" OFF)
|
||||||
|
|
||||||
|
set(PNG_PREFIX "" CACHE STRING "Prefix to add to the API function names")
|
||||||
|
set(DFA_XTRA "" CACHE FILEPATH "File containing extra configuration settings")
|
||||||
|
|
||||||
|
if(PNG_HARDWARE_OPTIMIZATIONS)
|
||||||
|
|
||||||
|
# set definitions and sources for arm
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64")
|
||||||
|
set(PNG_ARM_NEON_POSSIBLE_VALUES check on off)
|
||||||
|
set(PNG_ARM_NEON "check" CACHE STRING "Enable ARM NEON optimizations:
|
||||||
|
check: (default) use internal checking code;
|
||||||
|
off: disable the optimizations;
|
||||||
|
on: turn on unconditionally.")
|
||||||
|
set_property(CACHE PNG_ARM_NEON PROPERTY STRINGS
|
||||||
|
${PNG_ARM_NEON_POSSIBLE_VALUES})
|
||||||
|
list(FIND PNG_ARM_NEON_POSSIBLE_VALUES ${PNG_ARM_NEON} index)
|
||||||
|
if(index EQUAL -1)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"PNG_ARM_NEON must be one of [${PNG_ARM_NEON_POSSIBLE_VALUES}]")
|
||||||
|
elseif(NOT ${PNG_ARM_NEON} STREQUAL "off")
|
||||||
|
set(libpng_arm_sources
|
||||||
|
arm/arm_init.c
|
||||||
|
arm/filter_neon.S
|
||||||
|
arm/filter_neon_intrinsics.c
|
||||||
|
arm/palette_neon_intrinsics.c)
|
||||||
|
|
||||||
|
if(${PNG_ARM_NEON} STREQUAL "on")
|
||||||
|
add_definitions(-DPNG_ARM_NEON_OPT=2)
|
||||||
|
elseif(${PNG_ARM_NEON} STREQUAL "check")
|
||||||
|
add_definitions(-DPNG_ARM_NEON_CHECK_SUPPORTED)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_definitions(-DPNG_ARM_NEON_OPT=0)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# set definitions and sources for powerpc
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*")
|
||||||
|
set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off)
|
||||||
|
set(PNG_POWERPC_VSX "on" CACHE STRING "Enable POWERPC VSX optimizations:
|
||||||
|
off: disable the optimizations.")
|
||||||
|
set_property(CACHE PNG_POWERPC_VSX PROPERTY STRINGS
|
||||||
|
${PNG_POWERPC_VSX_POSSIBLE_VALUES})
|
||||||
|
list(FIND PNG_POWERPC_VSX_POSSIBLE_VALUES ${PNG_POWERPC_VSX} index)
|
||||||
|
if(index EQUAL -1)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"PNG_POWERPC_VSX must be one of [${PNG_POWERPC_VSX_POSSIBLE_VALUES}]")
|
||||||
|
elseif(NOT ${PNG_POWERPC_VSX} STREQUAL "off")
|
||||||
|
set(libpng_powerpc_sources
|
||||||
|
powerpc/powerpc_init.c
|
||||||
|
powerpc/filter_vsx_intrinsics.c)
|
||||||
|
if(${PNG_POWERPC_VSX} STREQUAL "on")
|
||||||
|
add_definitions(-DPNG_POWERPC_VSX_OPT=2)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_definitions(-DPNG_POWERPC_VSX_OPT=0)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# set definitions and sources for intel
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*")
|
||||||
|
set(PNG_INTEL_SSE_POSSIBLE_VALUES on off)
|
||||||
|
set(PNG_INTEL_SSE "on" CACHE STRING "Enable INTEL_SSE optimizations:
|
||||||
|
off: disable the optimizations")
|
||||||
|
set_property(CACHE PNG_INTEL_SSE PROPERTY STRINGS
|
||||||
|
${PNG_INTEL_SSE_POSSIBLE_VALUES})
|
||||||
|
list(FIND PNG_INTEL_SSE_POSSIBLE_VALUES ${PNG_INTEL_SSE} index)
|
||||||
|
if(index EQUAL -1)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"PNG_INTEL_SSE must be one of [${PNG_INTEL_SSE_POSSIBLE_VALUES}]")
|
||||||
|
elseif(NOT ${PNG_INTEL_SSE} STREQUAL "off")
|
||||||
|
set(libpng_intel_sources
|
||||||
|
intel/intel_init.c
|
||||||
|
intel/filter_sse2_intrinsics.c)
|
||||||
|
if(${PNG_INTEL_SSE} STREQUAL "on")
|
||||||
|
add_definitions(-DPNG_INTEL_SSE_OPT=1)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_definitions(-DPNG_INTEL_SSE_OPT=0)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# set definitions and sources for MIPS
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*")
|
||||||
|
set(PNG_MIPS_MSA_POSSIBLE_VALUES on off)
|
||||||
|
set(PNG_MIPS_MSA "on" CACHE STRING "Enable MIPS_MSA optimizations:
|
||||||
|
off: disable the optimizations")
|
||||||
|
set_property(CACHE PNG_MIPS_MSA PROPERTY STRINGS
|
||||||
|
${PNG_MIPS_MSA_POSSIBLE_VALUES})
|
||||||
|
list(FIND PNG_MIPS_MSA_POSSIBLE_VALUES ${PNG_MIPS_MSA} index)
|
||||||
|
if(index EQUAL -1)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"PNG_MIPS_MSA must be one of [${PNG_MIPS_MSA_POSSIBLE_VALUES}]")
|
||||||
|
elseif(NOT ${PNG_MIPS_MSA} STREQUAL "off")
|
||||||
|
set(libpng_mips_sources
|
||||||
|
mips/mips_init.c
|
||||||
|
mips/filter_msa_intrinsics.c)
|
||||||
|
if(${PNG_MIPS_MSA} STREQUAL "on")
|
||||||
|
add_definitions(-DPNG_MIPS_MSA_OPT=2)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_definitions(-DPNG_MIPS_MSA_OPT=0)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
else(PNG_HARDWARE_OPTIMIZATIONS)
|
||||||
|
|
||||||
|
# set definitions and sources for arm
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64")
|
||||||
|
add_definitions(-DPNG_ARM_NEON_OPT=0)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# set definitions and sources for powerpc
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*")
|
||||||
|
add_definitions(-DPNG_POWERPC_VSX_OPT=0)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# set definitions and sources for intel
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*")
|
||||||
|
add_definitions(-DPNG_INTEL_SSE_OPT=0)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# set definitions and sources for MIPS
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*")
|
||||||
|
add_definitions(-DPNG_MIPS_MSA_OPT=0)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endif(PNG_HARDWARE_OPTIMIZATIONS)
|
||||||
|
|
||||||
|
# SET LIBNAME
|
||||||
|
set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
|
||||||
|
|
||||||
|
# to distinguish between debug and release lib
|
||||||
|
set(CMAKE_DEBUG_POSTFIX "d")
|
||||||
|
|
||||||
|
include(CheckCSourceCompiles)
|
||||||
|
option(ld-version-script "Enable linker version script" ON)
|
||||||
|
if(ld-version-script AND NOT APPLE)
|
||||||
|
# Check if LD supports linker scripts.
|
||||||
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map" "VERS_1 {
|
||||||
|
global: sym;
|
||||||
|
local: *;
|
||||||
|
};
|
||||||
|
|
||||||
|
VERS_2 {
|
||||||
|
global: sym2;
|
||||||
|
main;
|
||||||
|
} VERS_1;
|
||||||
|
")
|
||||||
|
set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
|
||||||
|
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/conftest.map'")
|
||||||
|
check_c_source_compiles("void sym(void) {}
|
||||||
|
void sym2(void) {}
|
||||||
|
int main(void) {return 0;}
|
||||||
|
" HAVE_LD_VERSION_SCRIPT)
|
||||||
|
if(NOT HAVE_LD_VERSION_SCRIPT)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE} "-Wl,-M -Wl,${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
|
||||||
|
check_c_source_compiles("void sym(void) {}
|
||||||
|
void sym2(void) {}
|
||||||
|
int main(void) {return 0;}
|
||||||
|
" HAVE_SOLARIS_LD_VERSION_SCRIPT)
|
||||||
|
endif()
|
||||||
|
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
|
||||||
|
file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Find symbol prefix. Likely obsolete and unnecessary with recent
|
||||||
|
# toolchains (it's not done in many other projects).
|
||||||
|
function(symbol_prefix)
|
||||||
|
set(SYMBOL_PREFIX)
|
||||||
|
|
||||||
|
execute_process(COMMAND "${CMAKE_C_COMPILER}" "-E" "-"
|
||||||
|
INPUT_FILE /dev/null
|
||||||
|
OUTPUT_VARIABLE OUT
|
||||||
|
RESULT_VARIABLE STATUS)
|
||||||
|
|
||||||
|
if(CPP_FAIL)
|
||||||
|
message(WARNING "Failed to run the C preprocessor")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(REPLACE "\n" ";" OUT "${OUT}")
|
||||||
|
foreach(line ${OUT})
|
||||||
|
string(REGEX MATCH "^PREFIX=" found_match "${line}")
|
||||||
|
if(found_match)
|
||||||
|
string(REGEX REPLACE "^PREFIX=(.*\)" "\\1" prefix "${line}")
|
||||||
|
string(REGEX MATCH "__USER_LABEL_PREFIX__" found_match "${prefix}")
|
||||||
|
if(found_match)
|
||||||
|
string(REGEX REPLACE "(.*)__USER_LABEL_PREFIX__(.*)" "\\1\\2" prefix "${prefix}")
|
||||||
|
endif()
|
||||||
|
set(SYMBOL_PREFIX "${prefix}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
message(STATUS "Symbol prefix: ${SYMBOL_PREFIX}")
|
||||||
|
set(SYMBOL_PREFIX "${SYMBOL_PREFIX}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
if(UNIX)
|
||||||
|
symbol_prefix()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_program(AWK NAMES gawk awk)
|
||||||
|
|
||||||
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
||||||
|
if(NOT AWK OR ANDROID)
|
||||||
|
# No awk available to generate sources; use pre-built pnglibconf.h
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h)
|
||||||
|
add_custom_target(genfiles) # Dummy
|
||||||
|
else()
|
||||||
|
include(CMakeParseArguments)
|
||||||
|
# Generate .chk from .out with awk
|
||||||
|
# generate_chk(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]])
|
||||||
|
function(generate_chk)
|
||||||
|
set(options)
|
||||||
|
set(oneValueArgs INPUT OUTPUT)
|
||||||
|
set(multiValueArgs DEPENDS)
|
||||||
|
cmake_parse_arguments(_GC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||||
|
if(NOT _GC_INPUT)
|
||||||
|
message(FATAL_ERROR "generate_chk: Missing INPUT argument")
|
||||||
|
endif()
|
||||||
|
if(NOT _GC_OUTPUT)
|
||||||
|
message(FATAL_ERROR "generate_chk: Missing OUTPUT argument")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT "${_GC_OUTPUT}"
|
||||||
|
COMMAND "${CMAKE_COMMAND}"
|
||||||
|
"-DINPUT=${_GC_INPUT}"
|
||||||
|
"-DOUTPUT=${_GC_OUTPUT}"
|
||||||
|
-P "${CMAKE_CURRENT_BINARY_DIR}/scripts/genchk.cmake"
|
||||||
|
DEPENDS "${_GC_INPUT}" ${_GC_DEPENDS}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Generate .out from .c with awk
|
||||||
|
# generate_out(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]])
|
||||||
|
function(generate_out)
|
||||||
|
set(options)
|
||||||
|
set(oneValueArgs INPUT OUTPUT)
|
||||||
|
set(multiValueArgs DEPENDS)
|
||||||
|
cmake_parse_arguments(_GO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||||
|
if(NOT _GO_INPUT)
|
||||||
|
message(FATAL_ERROR "generate_out: Missing INPUT argument")
|
||||||
|
endif()
|
||||||
|
if(NOT _GO_OUTPUT)
|
||||||
|
message(FATAL_ERROR "generate_out: Missing OUTPUT argument")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT "${_GO_OUTPUT}"
|
||||||
|
COMMAND "${CMAKE_COMMAND}"
|
||||||
|
"-DINPUT=${_GO_INPUT}"
|
||||||
|
"-DOUTPUT=${_GO_OUTPUT}"
|
||||||
|
-P "${CMAKE_CURRENT_BINARY_DIR}/scripts/genout.cmake"
|
||||||
|
DEPENDS "${_GO_INPUT}" ${_GO_DEPENDS}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Generate specific source file with awk
|
||||||
|
# generate_source(OUTPUT outputfile [DEPENDS dep1 [dep2...]])
|
||||||
|
function(generate_source)
|
||||||
|
set(options)
|
||||||
|
set(oneValueArgs OUTPUT)
|
||||||
|
set(multiValueArgs DEPENDS)
|
||||||
|
cmake_parse_arguments(_GSO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||||
|
if(NOT _GSO_OUTPUT)
|
||||||
|
message(FATAL_ERROR "generate_source: Missing OUTPUT argument")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_GSO_OUTPUT}"
|
||||||
|
COMMAND "${CMAKE_COMMAND}"
|
||||||
|
"-DOUTPUT=${_GSO_OUTPUT}"
|
||||||
|
-P "${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake"
|
||||||
|
DEPENDS ${_GSO_DEPENDS}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Copy file
|
||||||
|
function(generate_copy source destination)
|
||||||
|
add_custom_command(OUTPUT "${destination}"
|
||||||
|
COMMAND "${CMAKE_COMMAND}" -E remove "${destination}"
|
||||||
|
COMMAND "${CMAKE_COMMAND}" -E copy "${source}"
|
||||||
|
"${destination}"
|
||||||
|
DEPENDS "${source}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Generate scripts/pnglibconf.h
|
||||||
|
generate_source(OUTPUT "scripts/pnglibconf.c"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.awk"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h")
|
||||||
|
|
||||||
|
# Generate pnglibconf.c
|
||||||
|
generate_source(OUTPUT "pnglibconf.c"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.awk"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h")
|
||||||
|
|
||||||
|
if(PNG_PREFIX)
|
||||||
|
set(PNGLIBCONF_H_EXTRA_DEPENDS
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/macro.lst")
|
||||||
|
set(PNGPREFIX_H_EXTRA_DEPENDS
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
generate_out(INPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out")
|
||||||
|
|
||||||
|
# Generate pnglibconf.h
|
||||||
|
generate_source(OUTPUT "pnglibconf.h"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out"
|
||||||
|
${PNGLIBCONF_H_EXTRA_DEPENDS})
|
||||||
|
|
||||||
|
generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/intprefix.c"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h")
|
||||||
|
|
||||||
|
generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/prefix.c"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out")
|
||||||
|
|
||||||
|
# Generate pngprefix.h
|
||||||
|
generate_source(OUTPUT "pngprefix.h"
|
||||||
|
DEPENDS ${PNGPREFIX_H_EXTRA_DEPENDS})
|
||||||
|
|
||||||
|
generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/sym.c"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h")
|
||||||
|
|
||||||
|
generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.c"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt")
|
||||||
|
|
||||||
|
generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/vers.c"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h")
|
||||||
|
|
||||||
|
generate_chk(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out"
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk"
|
||||||
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/checksym.awk"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.def")
|
||||||
|
|
||||||
|
add_custom_target(symbol-check DEPENDS
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk")
|
||||||
|
|
||||||
|
generate_copy("${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/libpng.sym")
|
||||||
|
generate_copy("${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/libpng.vers")
|
||||||
|
|
||||||
|
add_custom_target(genvers DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers")
|
||||||
|
add_custom_target(gensym DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym")
|
||||||
|
|
||||||
|
add_custom_target("genprebuilt"
|
||||||
|
COMMAND "${CMAKE_COMMAND}"
|
||||||
|
"-DOUTPUT=scripts/pnglibconf.h.prebuilt"
|
||||||
|
-P "${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake"
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
|
||||||
|
# A single target handles generation of all generated files. If
|
||||||
|
# they are depended upon separately by multiple targets, this
|
||||||
|
# confuses parallel make (it would require a separate top-level
|
||||||
|
# target for each file to track the dependencies properly).
|
||||||
|
add_custom_target(genfiles DEPENDS
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/libpng.sym"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/libpng.vers"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out")
|
||||||
|
endif(NOT AWK OR ANDROID)
|
||||||
|
|
||||||
|
# OUR SOURCES
|
||||||
|
set(libpng_public_hdrs
|
||||||
|
png.h
|
||||||
|
pngconf.h
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h"
|
||||||
|
)
|
||||||
|
set(libpng_private_hdrs
|
||||||
|
pngpriv.h
|
||||||
|
pngdebug.h
|
||||||
|
pnginfo.h
|
||||||
|
pngstruct.h
|
||||||
|
)
|
||||||
|
if(AWK AND NOT ANDROID)
|
||||||
|
list(APPEND libpng_private_hdrs "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h")
|
||||||
|
endif()
|
||||||
|
set(libpng_sources
|
||||||
|
${libpng_public_hdrs}
|
||||||
|
${libpng_private_hdrs}
|
||||||
|
png.c
|
||||||
|
pngerror.c
|
||||||
|
pngget.c
|
||||||
|
pngmem.c
|
||||||
|
pngpread.c
|
||||||
|
pngread.c
|
||||||
|
pngrio.c
|
||||||
|
pngrtran.c
|
||||||
|
pngrutil.c
|
||||||
|
pngset.c
|
||||||
|
pngtrans.c
|
||||||
|
pngwio.c
|
||||||
|
pngwrite.c
|
||||||
|
pngwtran.c
|
||||||
|
pngwutil.c
|
||||||
|
${libpng_arm_sources}
|
||||||
|
${libpng_intel_sources}
|
||||||
|
${libpng_mips_sources}
|
||||||
|
${libpng_powerpc_sources}
|
||||||
|
)
|
||||||
|
set(pngtest_sources
|
||||||
|
pngtest.c
|
||||||
|
)
|
||||||
|
set(pngvalid_sources
|
||||||
|
contrib/libtests/pngvalid.c
|
||||||
|
)
|
||||||
|
set(pngstest_sources
|
||||||
|
contrib/libtests/pngstest.c
|
||||||
|
)
|
||||||
|
set(pngunknown_sources
|
||||||
|
contrib/libtests/pngunknown.c
|
||||||
|
)
|
||||||
|
set(pngimage_sources
|
||||||
|
contrib/libtests/pngimage.c
|
||||||
|
)
|
||||||
|
set(pngfix_sources
|
||||||
|
contrib/tools/pngfix.c
|
||||||
|
)
|
||||||
|
set(png_fix_itxt_sources
|
||||||
|
contrib/tools/png-fix-itxt.c
|
||||||
|
)
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PNG_DEBUG)
|
||||||
|
add_definitions(-DPNG_DEBUG)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# NOW BUILD OUR TARGET
|
||||||
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
|
||||||
|
|
||||||
|
unset(PNG_LIB_TARGETS)
|
||||||
|
|
||||||
|
if(PNG_STATIC)
|
||||||
|
# does not work without changing name
|
||||||
|
set(PNG_LIB_NAME_STATIC png_static)
|
||||||
|
add_library(png_static STATIC ${libpng_sources})
|
||||||
|
add_dependencies(png_static genfiles)
|
||||||
|
# MSVC doesn't use a different file extension for shared vs. static
|
||||||
|
# libs. We are able to change OUTPUT_NAME to remove the _static
|
||||||
|
# for all other platforms.
|
||||||
|
if(NOT MSVC)
|
||||||
|
set_target_properties(png_static PROPERTIES
|
||||||
|
OUTPUT_NAME "${PNG_LIB_NAME}"
|
||||||
|
CLEAN_DIRECT_OUTPUT 1)
|
||||||
|
else()
|
||||||
|
set_target_properties(png_static PROPERTIES
|
||||||
|
OUTPUT_NAME "${PNG_LIB_NAME}_static"
|
||||||
|
CLEAN_DIRECT_OUTPUT 1)
|
||||||
|
endif()
|
||||||
|
list(APPEND PNG_LIB_TARGETS png_static)
|
||||||
|
if(MSVC)
|
||||||
|
# msvc does not append 'lib' - do it here to have consistent name
|
||||||
|
set_target_properties(png_static PROPERTIES PREFIX "lib")
|
||||||
|
endif()
|
||||||
|
target_link_libraries(png_static ${M_LIBRARY})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT PNG_LIB_TARGETS)
|
||||||
|
message(SEND_ERROR
|
||||||
|
"No library variant selected to build. "
|
||||||
|
"Please enable at least one of the following options: "
|
||||||
|
"PNG_STATIC, PNG_SHARED, PNG_FRAMEWORK")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Set a variable with CMake code which:
|
||||||
|
# Creates a symlink from src to dest (if possible) or alternatively
|
||||||
|
# copies if different.
|
||||||
|
include(CMakeParseArguments)
|
||||||
|
|
||||||
|
function(create_symlink DEST_FILE)
|
||||||
|
|
||||||
|
cmake_parse_arguments(S "" "FILE;TARGET" "" ${ARGN})
|
||||||
|
|
||||||
|
if(NOT S_TARGET AND NOT S_FILE)
|
||||||
|
message(FATAL_ERROR "create_symlink: Missing TARGET or FILE argument")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(S_TARGET AND S_FILE)
|
||||||
|
message(FATAL_ERROR "create_symlink: Both source file ${S_FILE} and build target ${S_TARGET} arguments are present; can only have one.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(S_FILE)
|
||||||
|
# If we don't need to symlink something that's coming from a build target,
|
||||||
|
# we can go ahead and symlink/copy at configure time.
|
||||||
|
if(CMAKE_HOST_WIN32 AND NOT CYGWIN)
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${S_FILE} ${DEST_FILE}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
else()
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E create_symlink ${S_FILE} ${DEST_FILE}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(S_TARGET)
|
||||||
|
# We need to use generator expressions, which can be a bit tricky, so for
|
||||||
|
# simplicity make the symlink a POST_BUILD step and use the TARGET
|
||||||
|
# signature of add_custom_command.
|
||||||
|
if(CMAKE_HOST_WIN32 AND NOT CYGWIN)
|
||||||
|
add_custom_command(TARGET ${S_TARGET} POST_BUILD
|
||||||
|
COMMAND "${CMAKE_COMMAND}" -E copy_if_different $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE})
|
||||||
|
else()
|
||||||
|
add_custom_command(TARGET ${S_TARGET} POST_BUILD
|
||||||
|
COMMAND "${CMAKE_COMMAND}" -E create_symlink $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Create source generation scripts.
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genchk.cmake.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/scripts/genchk.cmake @ONLY)
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genout.cmake.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/scripts/genout.cmake @ONLY)
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/gensrc.cmake.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake @ONLY)
|
||||||
|
|
||||||
|
# libpng is a library so default to 'lib'
|
||||||
|
if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
|
||||||
|
set(CMAKE_INSTALL_LIBDIR lib)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# CREATE PKGCONFIG FILES
|
||||||
|
# We use the same files like ./configure, so we have to set its vars.
|
||||||
|
# Only do this on Windows for Cygwin - the files don't make much sense outside
|
||||||
|
# of a UNIX look-alike.
|
||||||
|
if(NOT WIN32 OR CYGWIN OR MINGW)
|
||||||
|
set(prefix ${CMAKE_INSTALL_PREFIX})
|
||||||
|
set(exec_prefix ${CMAKE_INSTALL_PREFIX})
|
||||||
|
set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
|
||||||
|
set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
|
||||||
|
set(LIBS "-lz -lm")
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY)
|
||||||
|
create_symlink(libpng.pc FILE ${PNGLIB_NAME}.pc)
|
||||||
|
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY)
|
||||||
|
create_symlink(libpng-config FILE ${PNGLIB_NAME}-config)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# SET UP LINKS
|
||||||
|
if(PNG_SHARED)
|
||||||
|
set_target_properties(png PROPERTIES
|
||||||
|
# VERSION 16.${PNGLIB_RELEASE}.1.6.37
|
||||||
|
VERSION 16.${PNGLIB_RELEASE}.0
|
||||||
|
SOVERSION 16
|
||||||
|
CLEAN_DIRECT_OUTPUT 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# INSTALL
|
||||||
|
if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
|
||||||
|
install(TARGETS ${PNG_LIB_TARGETS}
|
||||||
|
EXPORT libpng
|
||||||
|
RUNTIME DESTINATION bin
|
||||||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
|
||||||
|
if(PNG_SHARED)
|
||||||
|
# Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin
|
||||||
|
if(CYGWIN OR MINGW)
|
||||||
|
create_symlink(libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} TARGET png)
|
||||||
|
install(FILES $<TARGET_LINKER_FILE_DIR:png>/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT WIN32)
|
||||||
|
create_symlink(libpng${CMAKE_SHARED_LIBRARY_SUFFIX} TARGET png)
|
||||||
|
install(FILES $<TARGET_LINKER_FILE_DIR:png>/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PNG_STATIC)
|
||||||
|
if(NOT WIN32 OR CYGWIN OR MINGW)
|
||||||
|
create_symlink(libpng${CMAKE_STATIC_LIBRARY_SUFFIX} TARGET png_static)
|
||||||
|
install(FILES $<TARGET_LINKER_FILE_DIR:png_static>/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL)
|
||||||
|
install(FILES ${libpng_public_hdrs} DESTINATION include)
|
||||||
|
install(FILES ${libpng_public_hdrs} DESTINATION include/${PNGLIB_NAME})
|
||||||
|
endif()
|
||||||
|
if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL)
|
||||||
|
if(NOT WIN32 OR CYGWIN OR MINGW)
|
||||||
|
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin)
|
||||||
|
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config DESTINATION bin)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT SKIP_INSTALL_PROGRAMS AND NOT SKIP_INSTALL_ALL)
|
||||||
|
install(TARGETS ${PNG_BIN_TARGETS}
|
||||||
|
RUNTIME DESTINATION bin)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL)
|
||||||
|
# Install man pages
|
||||||
|
if(NOT PNG_MAN_DIR)
|
||||||
|
set(PNG_MAN_DIR "share/man")
|
||||||
|
endif()
|
||||||
|
install(FILES libpng.3 libpngpf.3 DESTINATION ${PNG_MAN_DIR}/man3)
|
||||||
|
install(FILES png.5 DESTINATION ${PNG_MAN_DIR}/man5)
|
||||||
|
# Install pkg-config files
|
||||||
|
if(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW)
|
||||||
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
|
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
|
||||||
|
DESTINATION bin)
|
||||||
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
|
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
|
||||||
|
DESTINATION bin)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Create an export file that CMake users can include() to import our targets.
|
||||||
|
if(NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL)
|
||||||
|
install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# what's with libpng-manual.txt and all the extra files?
|
||||||
|
|
||||||
|
# UNINSTALL
|
||||||
|
# do we need this?
|
||||||
|
|
||||||
|
# DIST
|
||||||
|
# do we need this?
|
||||||
|
|
||||||
|
# to create msvc import lib for mingw compiled shared lib
|
||||||
|
# pexports libpng.dll > libpng.def
|
||||||
|
# lib /def:libpng.def /machine:x86
|
||||||
@ -105,8 +105,28 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# silence excessive warnings for new Intel Compilers
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")
|
||||||
|
set(CMAKE_TUNE_DEFAULT "-Wno-tautological-constant-compare -Wno-unused-command-line-argument")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# silence excessive warnings for PGI/NVHPC compilers
|
||||||
|
if((CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC") OR (CMAKE_CXX_COMPILER_ID STREQUAL "PGI"))
|
||||||
|
set(CMAKE_TUNE_DEFAULT "-Minform=severe")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# silence nvcc warnings
|
||||||
|
if((PKG_KOKKOS) AND (Kokkos_ENABLE_CUDA) AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))
|
||||||
|
set(CMAKE_TUNE_DEFAULT "${CMAKE_TUNE_DEFAULT} -Xcudafe --diag_suppress=unrecognized_pragma")
|
||||||
|
endif()
|
||||||
|
|
||||||
# we require C++11 without extensions. Kokkos requires at least C++14 (currently)
|
# we require C++11 without extensions. Kokkos requires at least C++14 (currently)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
if(NOT CMAKE_CXX_STANDARD)
|
||||||
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
endif()
|
||||||
|
if(CMAKE_CXX_STANDARD LESS 11)
|
||||||
|
message(FATAL_ERROR "C++ standard must be set to at least 11")
|
||||||
|
endif()
|
||||||
if(PKG_KOKKOS AND (CMAKE_CXX_STANDARD LESS 14))
|
if(PKG_KOKKOS AND (CMAKE_CXX_STANDARD LESS 14))
|
||||||
set(CMAKE_CXX_STANDARD 14)
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
endif()
|
endif()
|
||||||
@ -115,9 +135,12 @@ set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Use compiler extensions")
|
|||||||
# ugly hacks for MSVC which by default always reports an old C++ standard in the __cplusplus macro
|
# ugly hacks for MSVC which by default always reports an old C++ standard in the __cplusplus macro
|
||||||
# and prints lots of pointless warnings about "unsafe" functions
|
# and prints lots of pointless warnings about "unsafe" functions
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
|
if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Intel"))
|
||||||
add_compile_options(/Zc:__cplusplus)
|
add_compile_options(/Zc:__cplusplus)
|
||||||
add_compile_options(/wd4244)
|
add_compile_options(/wd4244)
|
||||||
add_compile_options(/wd4267)
|
add_compile_options(/wd4267)
|
||||||
|
add_compile_options(/EHsc)
|
||||||
|
endif()
|
||||||
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
|
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -129,6 +152,19 @@ endif()
|
|||||||
########################################################################
|
########################################################################
|
||||||
# User input options #
|
# User input options #
|
||||||
########################################################################
|
########################################################################
|
||||||
|
# set path to python interpreter and thus enforcing python version if
|
||||||
|
# when in a virtual environment and PYTHON_EXECUTABLE is not set on command line
|
||||||
|
if(DEFINED ENV{VIRTUAL_ENV} AND NOT PYTHON_EXECUTABLE)
|
||||||
|
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
|
||||||
|
set(PYTHON_EXECUTABLE "$ENV{VIRTUAL_ENV}/Scripts/python.exe")
|
||||||
|
else()
|
||||||
|
set(PYTHON_EXECUTABLE "$ENV{VIRTUAL_ENV}/bin/python")
|
||||||
|
endif()
|
||||||
|
set(Python_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
||||||
|
message(STATUS "Running in virtual environment: $ENV{VIRTUAL_ENV}\n"
|
||||||
|
" Setting Python interpreter to: ${PYTHON_EXECUTABLE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(LAMMPS_MACHINE "" CACHE STRING "Suffix to append to lmp binary (WON'T enable any features automatically")
|
set(LAMMPS_MACHINE "" CACHE STRING "Suffix to append to lmp binary (WON'T enable any features automatically")
|
||||||
mark_as_advanced(LAMMPS_MACHINE)
|
mark_as_advanced(LAMMPS_MACHINE)
|
||||||
if(LAMMPS_MACHINE)
|
if(LAMMPS_MACHINE)
|
||||||
@ -141,10 +177,12 @@ option(CMAKE_POSITION_INDEPENDENT_CODE "Create object compatible with shared lib
|
|||||||
option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF)
|
option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF)
|
||||||
option(BUILD_LAMMPS_SHELL "Build and install the LAMMPS shell" OFF)
|
option(BUILD_LAMMPS_SHELL "Build and install the LAMMPS shell" OFF)
|
||||||
|
|
||||||
# allow enabling clang-tidy for C++ files
|
# Support using clang-tidy for C++ files with selected options
|
||||||
set(ENABLE_CLANG_TIDY OFF CACHE BOOL "Include clang-tidy processing when compiling")
|
set(ENABLE_CLANG_TIDY OFF CACHE BOOL "Include clang-tidy processing when compiling")
|
||||||
if(ENABLE_CLANG_TIDY)
|
if(ENABLE_CLANG_TIDY)
|
||||||
set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=*-header-filter=.*" CACHE STRING "")
|
set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=-*,performance-trivially-destructible,performance-unnecessary-copy-initialization,performance-unnecessary-value-param,readability-redundant-control-flow,readability-redundant-declaration,readability-redundant-function-ptr-dereference,readability-redundant-member-init,readability-redundant-string-cstr,readability-redundant-string-init,readability-simplify-boolean-expr,readability-static-accessed-through-instance,readability-static-definition-in-anonymous-namespace,modernize-use-override,modernize-use-bool-literals,modernize-use-emplace,modernize-return-braced-init-list,modernize-use-equals-default,modernize-use-equals-delete,modernize-replace-random-shuffle,modernize-deprecated-headers,modernize-use-nullptr,modernize-use-noexcept,modernize-redundant-void-arg;-fix;-header-filter=.*,header-filter=library.h,header-filter=fmt/*.h" CACHE STRING "clang-tidy settings")
|
||||||
|
else()
|
||||||
|
unset(CMAKE_CXX_CLANG_TIDY CACHE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
@ -167,14 +205,16 @@ option(CMAKE_VERBOSE_MAKEFILE "Generate verbose Makefiles" OFF)
|
|||||||
|
|
||||||
set(STANDARD_PACKAGES
|
set(STANDARD_PACKAGES
|
||||||
ADIOS
|
ADIOS
|
||||||
|
AMOEBA
|
||||||
ASPHERE
|
ASPHERE
|
||||||
ATC
|
ATC
|
||||||
AWPMD
|
AWPMD
|
||||||
BOCS
|
BOCS
|
||||||
BODY
|
BODY
|
||||||
|
BPM
|
||||||
BROWNIAN
|
BROWNIAN
|
||||||
CG-DNA
|
CG-DNA
|
||||||
CG-SDK
|
CG-SPICA
|
||||||
CLASS2
|
CLASS2
|
||||||
COLLOID
|
COLLOID
|
||||||
COLVARS
|
COLVARS
|
||||||
@ -188,6 +228,7 @@ set(STANDARD_PACKAGES
|
|||||||
DPD-SMOOTH
|
DPD-SMOOTH
|
||||||
DRUDE
|
DRUDE
|
||||||
EFF
|
EFF
|
||||||
|
ELECTRODE
|
||||||
EXTRA-COMPUTE
|
EXTRA-COMPUTE
|
||||||
EXTRA-DUMP
|
EXTRA-DUMP
|
||||||
EXTRA-FIX
|
EXTRA-FIX
|
||||||
@ -208,7 +249,6 @@ set(STANDARD_PACKAGES
|
|||||||
MDI
|
MDI
|
||||||
MEAM
|
MEAM
|
||||||
MESONT
|
MESONT
|
||||||
MESSAGE
|
|
||||||
MGPT
|
MGPT
|
||||||
MISC
|
MISC
|
||||||
ML-HDNNP
|
ML-HDNNP
|
||||||
@ -307,7 +347,9 @@ string(TOUPPER ${LAMMPS_SIZES} LAMMPS_SIZES)
|
|||||||
target_compile_definitions(lammps PUBLIC -DLAMMPS_${LAMMPS_SIZES})
|
target_compile_definitions(lammps PUBLIC -DLAMMPS_${LAMMPS_SIZES})
|
||||||
|
|
||||||
# posix_memalign is not available on Windows
|
# posix_memalign is not available on Windows
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
# with INTEL package and Intel compilers we use TBB's aligned malloc
|
||||||
|
if((CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||||
|
AND NOT (PKG_INTEL AND ((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") OR (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM"))))
|
||||||
set(LAMMPS_MEMALIGN "0" CACHE STRING "posix_memalign() is not available on Windows" FORCE)
|
set(LAMMPS_MEMALIGN "0" CACHE STRING "posix_memalign() is not available on Windows" FORCE)
|
||||||
else()
|
else()
|
||||||
set(LAMMPS_MEMALIGN "64" CACHE STRING "enables the use of the posix_memalign() call instead of malloc() when large chunks or memory are allocated by LAMMPS. Set to 0 to disable")
|
set(LAMMPS_MEMALIGN "64" CACHE STRING "enables the use of the posix_memalign() call instead of malloc() when large chunks or memory are allocated by LAMMPS. Set to 0 to disable")
|
||||||
@ -328,10 +370,12 @@ pkg_depends(MPIIO MPI)
|
|||||||
pkg_depends(ATC MANYBODY)
|
pkg_depends(ATC MANYBODY)
|
||||||
pkg_depends(LATBOLTZ MPI)
|
pkg_depends(LATBOLTZ MPI)
|
||||||
pkg_depends(SCAFACOS MPI)
|
pkg_depends(SCAFACOS MPI)
|
||||||
|
pkg_depends(AMOEBA KSPACE)
|
||||||
pkg_depends(DIELECTRIC KSPACE)
|
pkg_depends(DIELECTRIC KSPACE)
|
||||||
pkg_depends(DIELECTRIC EXTRA-PAIR)
|
pkg_depends(DIELECTRIC EXTRA-PAIR)
|
||||||
pkg_depends(CG-DNA MOLECULE)
|
pkg_depends(CG-DNA MOLECULE)
|
||||||
pkg_depends(CG-DNA ASPHERE)
|
pkg_depends(CG-DNA ASPHERE)
|
||||||
|
pkg_depends(ELECTRODE KSPACE)
|
||||||
|
|
||||||
# detect if we may enable OpenMP support by default
|
# detect if we may enable OpenMP support by default
|
||||||
set(BUILD_OMP_DEFAULT OFF)
|
set(BUILD_OMP_DEFAULT OFF)
|
||||||
@ -369,11 +413,13 @@ if(BUILD_OMP)
|
|||||||
target_link_libraries(lmp PRIVATE OpenMP::OpenMP_CXX)
|
target_link_libraries(lmp PRIVATE OpenMP::OpenMP_CXX)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(PKG_MSCG OR PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_LATTE)
|
if(PKG_MSCG OR PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_LATTE OR PKG_ELECTRODE)
|
||||||
enable_language(C)
|
enable_language(C)
|
||||||
|
if (NOT USE_INTERNAL_LINALG)
|
||||||
find_package(LAPACK)
|
find_package(LAPACK)
|
||||||
find_package(BLAS)
|
find_package(BLAS)
|
||||||
if(NOT LAPACK_FOUND OR NOT BLAS_FOUND)
|
endif()
|
||||||
|
if(NOT LAPACK_FOUND OR NOT BLAS_FOUND OR USE_INTERNAL_LINALG)
|
||||||
include(CheckGeneratorSupport)
|
include(CheckGeneratorSupport)
|
||||||
if(NOT CMAKE_GENERATOR_SUPPORT_FORTRAN)
|
if(NOT CMAKE_GENERATOR_SUPPORT_FORTRAN)
|
||||||
status(FATAL_ERROR "Cannot build internal linear algebra library as CMake build tool lacks Fortran support")
|
status(FATAL_ERROR "Cannot build internal linear algebra library as CMake build tool lacks Fortran support")
|
||||||
@ -451,7 +497,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
foreach(PKG_WITH_INCL KSPACE PYTHON ML-IAP VORONOI COLVARS ML-HDNNP MDI MOLFILE NETCDF
|
foreach(PKG_WITH_INCL KSPACE PYTHON ML-IAP VORONOI COLVARS ML-HDNNP MDI MOLFILE NETCDF
|
||||||
PLUMED QMMM ML-QUIP SCAFACOS MACHDYN VTK KIM LATTE MESSAGE MSCG COMPRESS ML-PACE)
|
PLUMED QMMM ML-QUIP SCAFACOS MACHDYN VTK KIM LATTE MSCG COMPRESS ML-PACE)
|
||||||
if(PKG_${PKG_WITH_INCL})
|
if(PKG_${PKG_WITH_INCL})
|
||||||
include(Packages/${PKG_WITH_INCL})
|
include(Packages/${PKG_WITH_INCL})
|
||||||
endif()
|
endif()
|
||||||
@ -468,6 +514,7 @@ set(CMAKE_TUNE_FLAGS "${CMAKE_TUNE_DEFAULT}" CACHE STRING "Compiler and machine
|
|||||||
separate_arguments(CMAKE_TUNE_FLAGS)
|
separate_arguments(CMAKE_TUNE_FLAGS)
|
||||||
foreach(_FLAG ${CMAKE_TUNE_FLAGS})
|
foreach(_FLAG ${CMAKE_TUNE_FLAGS})
|
||||||
target_compile_options(lammps PRIVATE ${_FLAG})
|
target_compile_options(lammps PRIVATE ${_FLAG})
|
||||||
|
target_compile_options(lmp PRIVATE ${_FLAG})
|
||||||
endforeach()
|
endforeach()
|
||||||
########################################################################
|
########################################################################
|
||||||
# Basic system tests (standard libraries, headers, functions, types) #
|
# Basic system tests (standard libraries, headers, functions, types) #
|
||||||
@ -572,6 +619,10 @@ foreach(PKG_LIB POEMS ATC AWPMD H5MD MESONT)
|
|||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
if(PKG_ELECTRODE)
|
||||||
|
target_link_libraries(lammps PRIVATE ${LAPACK_LIBRARIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
if(PKG_AWPMD)
|
if(PKG_AWPMD)
|
||||||
target_link_libraries(awpmd PRIVATE ${LAPACK_LIBRARIES})
|
target_link_libraries(awpmd PRIVATE ${LAPACK_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
@ -597,7 +648,7 @@ endif()
|
|||||||
# packages which selectively include variants based on enabled styles
|
# packages which selectively include variants based on enabled styles
|
||||||
# e.g. accelerator packages
|
# e.g. accelerator packages
|
||||||
######################################################################
|
######################################################################
|
||||||
foreach(PKG_WITH_INCL CORESHELL DPD-SMOOTH PHONON QEQ OPENMP KOKKOS OPT INTEL GPU)
|
foreach(PKG_WITH_INCL CORESHELL DPD-SMOOTH MISC PHONON QEQ OPENMP KOKKOS OPT INTEL GPU)
|
||||||
if(PKG_${PKG_WITH_INCL})
|
if(PKG_${PKG_WITH_INCL})
|
||||||
include(Packages/${PKG_WITH_INCL})
|
include(Packages/${PKG_WITH_INCL})
|
||||||
endif()
|
endif()
|
||||||
@ -747,17 +798,23 @@ if(BUILD_SHARED_LIBS)
|
|||||||
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
|
# backward compatibility
|
||||||
|
if(PYTHON_EXECUTABLE)
|
||||||
|
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||||
|
endif()
|
||||||
find_package(Python COMPONENTS Interpreter)
|
find_package(Python COMPONENTS Interpreter)
|
||||||
endif()
|
endif()
|
||||||
if(BUILD_IS_MULTI_CONFIG)
|
if(BUILD_IS_MULTI_CONFIG)
|
||||||
set(LIBLAMMPS_SHARED_BINARY ${CMAKE_BINARY_DIR}/$<CONFIG>/liblammps${LAMMPS_MACHINE}${CMAKE_SHARED_LIBRARY_SUFFIX})
|
set(MY_BUILD_DIR ${CMAKE_BINARY_DIR}/$<CONFIG>)
|
||||||
else()
|
else()
|
||||||
set(LIBLAMMPS_SHARED_BINARY ${CMAKE_BINARY_DIR}/liblammps${LAMMPS_MACHINE}${CMAKE_SHARED_LIBRARY_SUFFIX})
|
set(MY_BUILD_DIR ${CMAKE_BINARY_DIR})
|
||||||
endif()
|
endif()
|
||||||
|
set(LIBLAMMPS_SHARED_BINARY ${MY_BUILD_DIR}/liblammps${LAMMPS_MACHINE}${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||||
if(Python_EXECUTABLE)
|
if(Python_EXECUTABLE)
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
install-python ${CMAKE_COMMAND} -E remove_directory build
|
install-python ${CMAKE_COMMAND} -E remove_directory build
|
||||||
COMMAND ${Python_EXECUTABLE} ${LAMMPS_PYTHON_DIR}/install.py -p ${LAMMPS_PYTHON_DIR}/lammps -l ${LIBLAMMPS_SHARED_BINARY}
|
COMMAND ${Python_EXECUTABLE} ${LAMMPS_PYTHON_DIR}/install.py -p ${LAMMPS_PYTHON_DIR}/lammps
|
||||||
|
-l ${LIBLAMMPS_SHARED_BINARY} -w ${MY_BUILD_DIR}
|
||||||
COMMENT "Installing LAMMPS Python module")
|
COMMENT "Installing LAMMPS Python module")
|
||||||
else()
|
else()
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
@ -777,11 +834,17 @@ endif()
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
if(BUILD_SHARED_LIBS OR PKG_PYTHON)
|
if(BUILD_SHARED_LIBS OR PKG_PYTHON)
|
||||||
if(CMAKE_VERSION VERSION_LESS 3.12)
|
if(CMAKE_VERSION VERSION_LESS 3.12)
|
||||||
|
# adjust so we find Python 3 versions before Python 2 on old systems with old CMake
|
||||||
|
set(Python_ADDITIONAL_VERSIONS 3.12 3.11 3.10 3.9 3.8 3.7 3.6)
|
||||||
find_package(PythonInterp) # Deprecated since version 3.12
|
find_package(PythonInterp) # Deprecated since version 3.12
|
||||||
if(PYTHONINTERP_FOUND)
|
if(PYTHONINTERP_FOUND)
|
||||||
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
|
# backward compatibility
|
||||||
|
if(PYTHON_EXECUTABLE)
|
||||||
|
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||||
|
endif()
|
||||||
find_package(Python COMPONENTS Interpreter)
|
find_package(Python COMPONENTS Interpreter)
|
||||||
endif()
|
endif()
|
||||||
if(Python_EXECUTABLE)
|
if(Python_EXECUTABLE)
|
||||||
@ -810,6 +873,7 @@ endif()
|
|||||||
include(FeatureSummary)
|
include(FeatureSummary)
|
||||||
feature_summary(DESCRIPTION "The following tools and libraries have been found and configured:" WHAT PACKAGES_FOUND)
|
feature_summary(DESCRIPTION "The following tools and libraries have been found and configured:" WHAT PACKAGES_FOUND)
|
||||||
message(STATUS "<<< Build configuration >>>
|
message(STATUS "<<< Build configuration >>>
|
||||||
|
LAMMPS Version: ${PROJECT_VERSION}
|
||||||
Operating System: ${CMAKE_SYSTEM_NAME} ${CMAKE_LINUX_DISTRO} ${CMAKE_DISTRO_VERSION}
|
Operating System: ${CMAKE_SYSTEM_NAME} ${CMAKE_LINUX_DISTRO} ${CMAKE_DISTRO_VERSION}
|
||||||
Build type: ${LAMMPS_BUILD_TYPE}
|
Build type: ${LAMMPS_BUILD_TYPE}
|
||||||
Install path: ${CMAKE_INSTALL_PREFIX}
|
Install path: ${CMAKE_INSTALL_PREFIX}
|
||||||
@ -919,6 +983,12 @@ if(PKG_KSPACE)
|
|||||||
else()
|
else()
|
||||||
message(STATUS "Kokkos FFT: cuFFT")
|
message(STATUS "Kokkos FFT: cuFFT")
|
||||||
endif()
|
endif()
|
||||||
|
elseif(Kokkos_ENABLE_HIP)
|
||||||
|
if(FFT STREQUAL "KISS")
|
||||||
|
message(STATUS "Kokkos FFT: KISS")
|
||||||
|
else()
|
||||||
|
message(STATUS "Kokkos FFT: hipFFT")
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
message(STATUS "Kokkos FFT: ${FFT}")
|
message(STATUS "Kokkos FFT: ${FFT}")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
195
cmake/CMakeLists.zlib
Normal file
195
cmake/CMakeLists.zlib
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
# When using CMake 3.4 and later, don't export symbols from executables unless
|
||||||
|
# the CMAKE_ENABLE_EXPORTS variable is set.
|
||||||
|
if(POLICY CMP0065)
|
||||||
|
cmake_policy(SET CMP0065 NEW)
|
||||||
|
endif()
|
||||||
|
if (POLICY CMP0077)
|
||||||
|
cmake_policy(SET CMP0077 NEW)
|
||||||
|
endif()
|
||||||
|
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
|
||||||
|
|
||||||
|
project(zlib C)
|
||||||
|
|
||||||
|
set(VERSION "1.2.11")
|
||||||
|
|
||||||
|
option(ASM686 "Enable building i686 assembly implementation" OFF)
|
||||||
|
option(AMD64 "Enable building amd64 assembly implementation" OFF)
|
||||||
|
|
||||||
|
set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
|
||||||
|
set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries")
|
||||||
|
set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers")
|
||||||
|
set(INSTALL_MAN_DIR "${CMAKE_INSTALL_PREFIX}/share/man" CACHE PATH "Installation directory for manual pages")
|
||||||
|
set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
|
||||||
|
|
||||||
|
include(CheckTypeSize)
|
||||||
|
include(CheckFunctionExists)
|
||||||
|
include(CheckIncludeFile)
|
||||||
|
include(CheckCSourceCompiles)
|
||||||
|
|
||||||
|
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
|
||||||
|
check_include_file(stdint.h HAVE_STDINT_H)
|
||||||
|
check_include_file(stddef.h HAVE_STDDEF_H)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check to see if we have large file support
|
||||||
|
#
|
||||||
|
set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1)
|
||||||
|
# We add these other definitions here because CheckTypeSize.cmake
|
||||||
|
# in CMake 2.4.x does not automatically do so and we want
|
||||||
|
# compatibility with CMake 2.4.x.
|
||||||
|
if(HAVE_SYS_TYPES_H)
|
||||||
|
list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H)
|
||||||
|
endif()
|
||||||
|
if(HAVE_STDINT_H)
|
||||||
|
list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H)
|
||||||
|
endif()
|
||||||
|
if(HAVE_STDDEF_H)
|
||||||
|
list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H)
|
||||||
|
endif()
|
||||||
|
check_type_size(off64_t OFF64_T)
|
||||||
|
check_type_size(off64_t OFF64_T)
|
||||||
|
if(HAVE_OFF64_T)
|
||||||
|
add_definitions(-D_LARGEFILE64_SOURCE=1)
|
||||||
|
endif()
|
||||||
|
set(CMAKE_REQUIRED_DEFINITIONS) # clear variable
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check for fseeko
|
||||||
|
#
|
||||||
|
check_function_exists(fseeko HAVE_FSEEKO)
|
||||||
|
if(NOT HAVE_FSEEKO)
|
||||||
|
add_definitions(-DNO_FSEEKO)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check for unistd.h
|
||||||
|
#
|
||||||
|
check_include_file(unistd.h Z_HAVE_UNISTD_H)
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
set(CMAKE_DEBUG_POSTFIX "d")
|
||||||
|
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
|
||||||
|
add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
|
||||||
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
|
||||||
|
# If we're doing an out of source build and the user has a zconf.h
|
||||||
|
# in their source tree...
|
||||||
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h)
|
||||||
|
file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib.pc)
|
||||||
|
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein
|
||||||
|
${ZLIB_PC} @ONLY)
|
||||||
|
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY)
|
||||||
|
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR})
|
||||||
|
|
||||||
|
|
||||||
|
#============================================================================
|
||||||
|
# zlib
|
||||||
|
#============================================================================
|
||||||
|
|
||||||
|
set(ZLIB_PUBLIC_HDRS
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/zconf.h
|
||||||
|
zlib.h
|
||||||
|
)
|
||||||
|
set(ZLIB_PRIVATE_HDRS
|
||||||
|
crc32.h
|
||||||
|
deflate.h
|
||||||
|
gzguts.h
|
||||||
|
inffast.h
|
||||||
|
inffixed.h
|
||||||
|
inflate.h
|
||||||
|
inftrees.h
|
||||||
|
trees.h
|
||||||
|
zutil.h
|
||||||
|
)
|
||||||
|
set(ZLIB_SRCS
|
||||||
|
adler32.c
|
||||||
|
compress.c
|
||||||
|
crc32.c
|
||||||
|
deflate.c
|
||||||
|
gzclose.c
|
||||||
|
gzlib.c
|
||||||
|
gzread.c
|
||||||
|
gzwrite.c
|
||||||
|
inflate.c
|
||||||
|
infback.c
|
||||||
|
inftrees.c
|
||||||
|
inffast.c
|
||||||
|
trees.c
|
||||||
|
uncompr.c
|
||||||
|
zutil.c
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT MINGW)
|
||||||
|
set(ZLIB_DLL_SRCS
|
||||||
|
win32/zlib1.rc # If present will override custom build rule below.
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_COMPILER_IS_GNUCC)
|
||||||
|
if(ASM686)
|
||||||
|
set(ZLIB_ASMS contrib/asm686/match.S)
|
||||||
|
elseif (AMD64)
|
||||||
|
set(ZLIB_ASMS contrib/amd64/amd64-match.S)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if(ZLIB_ASMS)
|
||||||
|
add_definitions(-DASMV)
|
||||||
|
set_source_files_properties(${ZLIB_ASMS} PROPERTIES LANGUAGE C COMPILE_FLAGS -DNO_UNDERLINE)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
if(ASM686)
|
||||||
|
ENABLE_LANGUAGE(ASM_MASM)
|
||||||
|
set(ZLIB_ASMS
|
||||||
|
contrib/masmx86/inffas32.asm
|
||||||
|
contrib/masmx86/match686.asm
|
||||||
|
)
|
||||||
|
elseif (AMD64)
|
||||||
|
ENABLE_LANGUAGE(ASM_MASM)
|
||||||
|
set(ZLIB_ASMS
|
||||||
|
contrib/masmx64/gvmat64.asm
|
||||||
|
contrib/masmx64/inffasx64.asm
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ZLIB_ASMS)
|
||||||
|
add_definitions(-DASMV -DASMINF)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION
|
||||||
|
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents)
|
||||||
|
string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*"
|
||||||
|
"\\1" ZLIB_FULL_VERSION ${_zlib_h_contents})
|
||||||
|
|
||||||
|
if(MINGW)
|
||||||
|
# This gets us DLL resource information when compiling on MinGW.
|
||||||
|
if(NOT CMAKE_RC_COMPILER)
|
||||||
|
set(CMAKE_RC_COMPILER windres.exe)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
|
||||||
|
COMMAND ${CMAKE_RC_COMPILER}
|
||||||
|
-D GCC_WINDRES
|
||||||
|
-I ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
-I ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
-o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
|
||||||
|
-i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc)
|
||||||
|
set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
|
||||||
|
endif(MINGW)
|
||||||
|
|
||||||
|
add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
|
||||||
|
|
||||||
|
if(UNIX)
|
||||||
|
# On unix-like platforms the library is almost always called libz
|
||||||
|
set_target_properties(zlibstatic PROPERTIES OUTPUT_NAME z)
|
||||||
|
endif()
|
||||||
@ -8,7 +8,7 @@
|
|||||||
"installRoot": "${workspaceRoot}\\install\\${name}",
|
"installRoot": "${workspaceRoot}\\install\\${name}",
|
||||||
"cmakeCommandArgs": "-C ${workspaceRoot}\\cmake\\presets\\windows.cmake",
|
"cmakeCommandArgs": "-C ${workspaceRoot}\\cmake\\presets\\windows.cmake",
|
||||||
"buildCommandArgs": "",
|
"buildCommandArgs": "",
|
||||||
"ctestCommandArgs": "",
|
"ctestCommandArgs": "-V",
|
||||||
"inheritEnvironments": [ "msvc_x64_x64" ],
|
"inheritEnvironments": [ "msvc_x64_x64" ],
|
||||||
"variables": [
|
"variables": [
|
||||||
{
|
{
|
||||||
@ -26,11 +26,6 @@
|
|||||||
"value": "True",
|
"value": "True",
|
||||||
"type": "BOOL"
|
"type": "BOOL"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "PKG_PYTHON",
|
|
||||||
"value": "True",
|
|
||||||
"type": "BOOL"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "ENABLE_TESTING",
|
"name": "ENABLE_TESTING",
|
||||||
"value": "True",
|
"value": "True",
|
||||||
@ -46,7 +41,7 @@
|
|||||||
"installRoot": "${workspaceRoot}\\install\\${name}",
|
"installRoot": "${workspaceRoot}\\install\\${name}",
|
||||||
"cmakeCommandArgs": "-C ${workspaceRoot}\\cmake\\presets\\windows.cmake",
|
"cmakeCommandArgs": "-C ${workspaceRoot}\\cmake\\presets\\windows.cmake",
|
||||||
"buildCommandArgs": "",
|
"buildCommandArgs": "",
|
||||||
"ctestCommandArgs": "",
|
"ctestCommandArgs": "-V",
|
||||||
"inheritEnvironments": [ "msvc_x64_x64" ],
|
"inheritEnvironments": [ "msvc_x64_x64" ],
|
||||||
"variables": [
|
"variables": [
|
||||||
{
|
{
|
||||||
@ -64,11 +59,6 @@
|
|||||||
"value": "True",
|
"value": "True",
|
||||||
"type": "BOOL"
|
"type": "BOOL"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "PKG_PYTHON",
|
|
||||||
"value": "True",
|
|
||||||
"type": "BOOL"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "ENABLE_TESTING",
|
"name": "ENABLE_TESTING",
|
||||||
"value": "True",
|
"value": "True",
|
||||||
@ -102,11 +92,6 @@
|
|||||||
"value": "True",
|
"value": "True",
|
||||||
"type": "BOOL"
|
"type": "BOOL"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "PKG_PYTHON",
|
|
||||||
"value": "True",
|
|
||||||
"type": "BOOL"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "ENABLE_TESTING",
|
"name": "ENABLE_TESTING",
|
||||||
"value": "True",
|
"value": "True",
|
||||||
@ -122,7 +107,7 @@
|
|||||||
"installRoot": "${workspaceRoot}\\install\\${name}",
|
"installRoot": "${workspaceRoot}\\install\\${name}",
|
||||||
"cmakeCommandArgs": "-C ${workspaceRoot}\\cmake\\presets\\windows.cmake -DCMAKE_C_COMPILER=clang-cl.exe -DCMAKE_CXX_COMPILER=clang-cl.exe",
|
"cmakeCommandArgs": "-C ${workspaceRoot}\\cmake\\presets\\windows.cmake -DCMAKE_C_COMPILER=clang-cl.exe -DCMAKE_CXX_COMPILER=clang-cl.exe",
|
||||||
"buildCommandArgs": "",
|
"buildCommandArgs": "",
|
||||||
"ctestCommandArgs": "",
|
"ctestCommandArgs": "-V",
|
||||||
"inheritEnvironments": [ "clang_cl_x64" ],
|
"inheritEnvironments": [ "clang_cl_x64" ],
|
||||||
"variables": [
|
"variables": [
|
||||||
{
|
{
|
||||||
@ -141,7 +126,40 @@
|
|||||||
"type": "BOOL"
|
"type": "BOOL"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "PKG_PYTHON",
|
"name": "ENABLE_TESTING",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x64-Debug-IntelLLVM",
|
||||||
|
"generator": "Ninja",
|
||||||
|
"configurationType": "Debug",
|
||||||
|
"buildRoot": "${workspaceRoot}\\build\\${name}",
|
||||||
|
"installRoot": "${workspaceRoot}\\install\\${name}",
|
||||||
|
"buildCommandArgs": "",
|
||||||
|
"ctestCommandArgs": "-V",
|
||||||
|
"inheritEnvironments": [],
|
||||||
|
"cmakeCommandArgs": "-C ${workspaceRoot}\\cmake\\presets\\windows-intel-llvm.cmake -C ${workspaceRoot}\\cmake\\presets\\windows.cmake",
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"name": "PKG_ELECTRODE",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BUILD_SHARED_LIBS",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BUILD_TOOLS",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "LAMMPS_EXCEPTIONS",
|
||||||
"value": "True",
|
"value": "True",
|
||||||
"type": "BOOL"
|
"type": "BOOL"
|
||||||
},
|
},
|
||||||
@ -149,6 +167,140 @@
|
|||||||
"name": "ENABLE_TESTING",
|
"name": "ENABLE_TESTING",
|
||||||
"value": "True",
|
"value": "True",
|
||||||
"type": "BOOL"
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "FFT",
|
||||||
|
"value": "MKL",
|
||||||
|
"type": "STRING"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x64-Release-IntelLLVM",
|
||||||
|
"generator": "Ninja",
|
||||||
|
"configurationType": "Release",
|
||||||
|
"buildRoot": "${workspaceRoot}\\build\\${name}",
|
||||||
|
"installRoot": "${workspaceRoot}\\install\\${name}",
|
||||||
|
"cmakeCommandArgs": "-C ${workspaceRoot}\\cmake\\presets\\windows-intel-llvm.cmake -C ${workspaceRoot}\\cmake\\presets\\windows.cmake",
|
||||||
|
"buildCommandArgs": "",
|
||||||
|
"ctestCommandArgs": "-V",
|
||||||
|
"inheritEnvironments": [],
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"name": "PKG_ELECTRODE",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BUILD_SHARED_LIBS",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BUILD_TOOLS",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "LAMMPS_EXCEPTIONS",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ENABLE_TESTING",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "FFT",
|
||||||
|
"value": "MKL",
|
||||||
|
"type": "STRING"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x64-Debug-Intel-Classic",
|
||||||
|
"generator": "Ninja",
|
||||||
|
"configurationType": "Debug",
|
||||||
|
"buildRoot": "${workspaceRoot}\\build\\${name}",
|
||||||
|
"installRoot": "${workspaceRoot}\\install\\${name}",
|
||||||
|
"cmakeCommandArgs": "-C ${workspaceRoot}\\cmake\\presets\\windows-intel-classic.cmake -C ${workspaceRoot}\\cmake\\presets\\windows.cmake",
|
||||||
|
"buildCommandArgs": "",
|
||||||
|
"ctestCommandArgs": "-V",
|
||||||
|
"inheritEnvironments": [],
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"name": "PKG_ELECTRODE",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BUILD_SHARED_LIBS",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BUILD_TOOLS",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "LAMMPS_EXCEPTIONS",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ENABLE_TESTING",
|
||||||
|
"value": "False",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "FFT",
|
||||||
|
"value": "MKL",
|
||||||
|
"type": "STRING"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "x64-Release-Intel-Classic",
|
||||||
|
"generator": "Ninja",
|
||||||
|
"configurationType": "Release",
|
||||||
|
"buildRoot": "${workspaceRoot}\\build\\${name}",
|
||||||
|
"installRoot": "${workspaceRoot}\\install\\${name}",
|
||||||
|
"cmakeCommandArgs": "-C ${workspaceRoot}\\cmake\\presets\\windows-intel-classic.cmake -C ${workspaceRoot}\\cmake\\presets\\windows.cmake",
|
||||||
|
"buildCommandArgs": "",
|
||||||
|
"ctestCommandArgs": "-V",
|
||||||
|
"inheritEnvironments": [],
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"name": "PKG_ELECTRODE",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BUILD_SHARED_LIBS",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BUILD_TOOLS",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "LAMMPS_EXCEPTIONS",
|
||||||
|
"value": "True",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ENABLE_TESTING",
|
||||||
|
"value": "False",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "FFT",
|
||||||
|
"value": "MKL",
|
||||||
|
"type": "STRING"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,13 +7,13 @@ if(BUILD_DOC)
|
|||||||
# Sphinx 3.x requires at least Python 3.5
|
# Sphinx 3.x requires at least Python 3.5
|
||||||
if(CMAKE_VERSION VERSION_LESS 3.12)
|
if(CMAKE_VERSION VERSION_LESS 3.12)
|
||||||
find_package(PythonInterp 3.5 REQUIRED)
|
find_package(PythonInterp 3.5 REQUIRED)
|
||||||
set(VIRTUALENV ${PYTHON_EXECUTABLE} -m virtualenv -p ${PYTHON_EXECUTABLE})
|
set(VIRTUALENV ${PYTHON_EXECUTABLE} -m venv)
|
||||||
else()
|
else()
|
||||||
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
||||||
if(Python3_VERSION VERSION_LESS 3.5)
|
if(Python3_VERSION VERSION_LESS 3.5)
|
||||||
message(FATAL_ERROR "Python 3.5 and up is required to build the HTML documentation")
|
message(FATAL_ERROR "Python 3.5 and up is required to build the HTML documentation")
|
||||||
endif()
|
endif()
|
||||||
set(VIRTUALENV ${Python3_EXECUTABLE} -m virtualenv -p ${Python3_EXECUTABLE})
|
set(VIRTUALENV ${Python3_EXECUTABLE} -m venv)
|
||||||
endif()
|
endif()
|
||||||
find_package(Doxygen 1.8.10 REQUIRED)
|
find_package(Doxygen 1.8.10 REQUIRED)
|
||||||
|
|
||||||
|
|||||||
208
cmake/Modules/LAMMPSInterfacePlugin.cmake
Normal file
208
cmake/Modules/LAMMPSInterfacePlugin.cmake
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
# CMake script code to define LAMMPS settings required for building LAMMPS plugins
|
||||||
|
|
||||||
|
# enforce out-of-source build
|
||||||
|
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
|
||||||
|
message(FATAL_ERROR "In-source builds are not allowed. You must create and use a build directory. "
|
||||||
|
"Please remove CMakeCache.txt and CMakeFiles first.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(LAMMPS_THIRDPARTY_URL "https://download.lammps.org/thirdparty"
|
||||||
|
CACHE STRING "URL for thirdparty package downloads")
|
||||||
|
|
||||||
|
# global LAMMPS/plugin build settings
|
||||||
|
set(LAMMPS_SOURCE_DIR "" CACHE PATH "Location of LAMMPS sources folder")
|
||||||
|
if(NOT LAMMPS_SOURCE_DIR)
|
||||||
|
message(FATAL_ERROR "Must set LAMMPS_SOURCE_DIR")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# by default, install into $HOME/.local (not /usr/local),
|
||||||
|
# so that no root access (and sudo) is needed
|
||||||
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||||
|
set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local" CACHE PATH "Default install path" FORCE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ugly hacks for MSVC which by default always reports an old C++ standard in the __cplusplus macro
|
||||||
|
# and prints lots of pointless warnings about "unsafe" functions
|
||||||
|
if(MSVC)
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
add_compile_options(/Zc:__cplusplus)
|
||||||
|
add_compile_options(/wd4244)
|
||||||
|
add_compile_options(/wd4267)
|
||||||
|
if(LAMMPS_EXCEPTIONS)
|
||||||
|
add_compile_options(/EHsc)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# C++11 is required
|
||||||
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
# Need -restrict with Intel compilers
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict")
|
||||||
|
endif()
|
||||||
|
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
|
||||||
|
|
||||||
|
#######
|
||||||
|
# helper functions from LAMMPSUtils.cmake
|
||||||
|
function(validate_option name values)
|
||||||
|
string(TOLOWER ${${name}} needle_lower)
|
||||||
|
string(TOUPPER ${${name}} needle_upper)
|
||||||
|
list(FIND ${values} ${needle_lower} IDX_LOWER)
|
||||||
|
list(FIND ${values} ${needle_upper} IDX_UPPER)
|
||||||
|
if(${IDX_LOWER} LESS 0 AND ${IDX_UPPER} LESS 0)
|
||||||
|
list_to_bulletpoints(POSSIBLE_VALUE_LIST ${${values}})
|
||||||
|
message(FATAL_ERROR "\n########################################################################\n"
|
||||||
|
"Invalid value '${${name}}' for option ${name}\n"
|
||||||
|
"\n"
|
||||||
|
"Possible values are:\n"
|
||||||
|
"${POSSIBLE_VALUE_LIST}"
|
||||||
|
"########################################################################")
|
||||||
|
endif()
|
||||||
|
endfunction(validate_option)
|
||||||
|
|
||||||
|
# helper function for getting the most recently modified file or folder from a glob pattern
|
||||||
|
function(get_newest_file path variable)
|
||||||
|
file(GLOB _dirs ${path})
|
||||||
|
set(_besttime 2000-01-01T00:00:00)
|
||||||
|
set(_bestfile "<unknown>")
|
||||||
|
foreach(_dir ${_dirs})
|
||||||
|
file(TIMESTAMP ${_dir} _newtime)
|
||||||
|
if(_newtime IS_NEWER_THAN _besttime)
|
||||||
|
set(_bestfile ${_dir})
|
||||||
|
set(_besttime ${_newtime})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
if(_bestfile STREQUAL "<unknown>")
|
||||||
|
message(FATAL_ERROR "Could not find valid path at: ${path}")
|
||||||
|
endif()
|
||||||
|
set(${variable} ${_bestfile} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# get LAMMPS version date
|
||||||
|
function(get_lammps_version version_header variable)
|
||||||
|
file(STRINGS ${version_header} line REGEX LAMMPS_VERSION)
|
||||||
|
string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\1\\2\\3" date "${line}")
|
||||||
|
set(${variable} "${date}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
#################################################################################
|
||||||
|
# LAMMPS C++ interface. We only need the header related parts except on windows.
|
||||||
|
add_library(lammps INTERFACE)
|
||||||
|
target_include_directories(lammps INTERFACE ${LAMMPS_SOURCE_DIR})
|
||||||
|
if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND CMAKE_CROSSCOMPILING)
|
||||||
|
target_link_libraries(lammps INTERFACE ${CMAKE_BINARY_DIR}/../liblammps.dll.a)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# MPI configuration
|
||||||
|
if(NOT CMAKE_CROSSCOMPILING)
|
||||||
|
set(MPI_CXX_SKIP_MPICXX TRUE)
|
||||||
|
find_package(MPI QUIET)
|
||||||
|
option(BUILD_MPI "Build MPI version" ${MPI_FOUND})
|
||||||
|
else()
|
||||||
|
option(BUILD_MPI "Build MPI version" OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(BUILD_MPI)
|
||||||
|
# do not include the (obsolete) MPI C++ bindings which makes
|
||||||
|
# for leaner object files and avoids namespace conflicts
|
||||||
|
set(MPI_CXX_SKIP_MPICXX TRUE)
|
||||||
|
# We use a non-standard procedure to cross-compile with MPI on Windows
|
||||||
|
if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND CMAKE_CROSSCOMPILING)
|
||||||
|
# Download and configure custom MPICH files for Windows
|
||||||
|
message(STATUS "Downloading and configuring MPICH-1.4.1 for Windows")
|
||||||
|
set(MPICH2_WIN64_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/mpich2-win64-devel.tar.gz" CACHE STRING "URL for MPICH2 (win64) tarball")
|
||||||
|
set(MPICH2_WIN32_DEVEL_URL "${LAMMPS_THIRDPARTY_URL}/mpich2-win32-devel.tar.gz" CACHE STRING "URL for MPICH2 (win32) tarball")
|
||||||
|
set(MPICH2_WIN64_DEVEL_MD5 "4939fdb59d13182fd5dd65211e469f14" CACHE STRING "MD5 checksum of MPICH2 (win64) tarball")
|
||||||
|
set(MPICH2_WIN32_DEVEL_MD5 "a61d153500dce44e21b755ee7257e031" CACHE STRING "MD5 checksum of MPICH2 (win32) tarball")
|
||||||
|
mark_as_advanced(MPICH2_WIN64_DEVEL_URL)
|
||||||
|
mark_as_advanced(MPICH2_WIN32_DEVEL_URL)
|
||||||
|
mark_as_advanced(MPICH2_WIN64_DEVEL_MD5)
|
||||||
|
mark_as_advanced(MPICH2_WIN32_DEVEL_MD5)
|
||||||
|
|
||||||
|
include(ExternalProject)
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
||||||
|
ExternalProject_Add(mpi4win_build
|
||||||
|
URL ${MPICH2_WIN64_DEVEL_URL}
|
||||||
|
URL_MD5 ${MPICH2_WIN64_DEVEL_MD5}
|
||||||
|
CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND ""
|
||||||
|
BUILD_BYPRODUCTS <SOURCE_DIR>/lib/libmpi.a)
|
||||||
|
else()
|
||||||
|
ExternalProject_Add(mpi4win_build
|
||||||
|
URL ${MPICH2_WIN32_DEVEL_URL}
|
||||||
|
URL_MD5 ${MPICH2_WIN32_DEVEL_MD5}
|
||||||
|
CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND ""
|
||||||
|
BUILD_BYPRODUCTS <SOURCE_DIR>/lib/libmpi.a)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ExternalProject_get_property(mpi4win_build SOURCE_DIR)
|
||||||
|
file(MAKE_DIRECTORY "${SOURCE_DIR}/include")
|
||||||
|
add_library(MPI::MPI_CXX UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(MPI::MPI_CXX PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmpi.a"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include"
|
||||||
|
INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX")
|
||||||
|
add_dependencies(MPI::MPI_CXX mpi4win_build)
|
||||||
|
|
||||||
|
# set variables for status reporting at the end of CMake run
|
||||||
|
set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include")
|
||||||
|
set(MPI_CXX_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX")
|
||||||
|
set(MPI_CXX_LIBRARIES "${SOURCE_DIR}/lib/libmpi.a")
|
||||||
|
else()
|
||||||
|
find_package(MPI REQUIRED)
|
||||||
|
option(LAMMPS_LONGLONG_TO_LONG "Workaround if your system or MPI version does not recognize 'long long' data types" OFF)
|
||||||
|
if(LAMMPS_LONGLONG_TO_LONG)
|
||||||
|
target_compile_definitions(lammps INTERFACE -DLAMMPS_LONGLONG_TO_LONG)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
target_link_libraries(lammps INTERFACE MPI::MPI_CXX)
|
||||||
|
else()
|
||||||
|
add_library(mpi_stubs INTERFACE)
|
||||||
|
target_include_directories(mpi_stubs INTERFACE $<BUILD_INTERFACE:${LAMMPS_SOURCE_DIR}/STUBS>)
|
||||||
|
target_link_libraries(lammps INTERFACE mpi_stubs)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# detect if we may enable OpenMP support by default
|
||||||
|
set(BUILD_OMP_DEFAULT OFF)
|
||||||
|
find_package(OpenMP QUIET)
|
||||||
|
if(OpenMP_FOUND)
|
||||||
|
check_include_file_cxx(omp.h HAVE_OMP_H_INCLUDE)
|
||||||
|
if(HAVE_OMP_H_INCLUDE)
|
||||||
|
set(BUILD_OMP_DEFAULT ON)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(BUILD_OMP "Build with OpenMP support" ${BUILD_OMP_DEFAULT})
|
||||||
|
|
||||||
|
if(BUILD_OMP)
|
||||||
|
find_package(OpenMP REQUIRED)
|
||||||
|
check_include_file_cxx(omp.h HAVE_OMP_H_INCLUDE)
|
||||||
|
if(NOT HAVE_OMP_H_INCLUDE)
|
||||||
|
message(FATAL_ERROR "Cannot find the 'omp.h' header file required for full OpenMP support")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0)) OR
|
||||||
|
(CMAKE_CXX_COMPILER_ID STREQUAL "PGI") OR
|
||||||
|
((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)) OR
|
||||||
|
((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0)))
|
||||||
|
# GCC 9.x and later plus Clang 10.x and later implement strict OpenMP 4.0 semantics for consts.
|
||||||
|
# Intel 18.0 was tested to support both, so we switch to OpenMP 4+ from 19.x onward to be safe.
|
||||||
|
target_compile_definitions(lammps INTERFACE -DLAMMPS_OMP_COMPAT=4)
|
||||||
|
else()
|
||||||
|
target_compile_definitions(lammps INTERFACE -DLAMMPS_OMP_COMPAT=3)
|
||||||
|
endif()
|
||||||
|
target_link_libraries(lammps INTERFACE OpenMP::OpenMP_CXX)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
################
|
||||||
|
# integer size selection
|
||||||
|
set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallsmall: all 32-bit, smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)")
|
||||||
|
set(LAMMPS_SIZES_VALUES smallbig bigbig smallsmall)
|
||||||
|
set_property(CACHE LAMMPS_SIZES PROPERTY STRINGS ${LAMMPS_SIZES_VALUES})
|
||||||
|
validate_option(LAMMPS_SIZES LAMMPS_SIZES_VALUES)
|
||||||
|
string(TOUPPER ${LAMMPS_SIZES} LAMMPS_SIZES)
|
||||||
|
target_compile_definitions(lammps INTERFACE -DLAMMPS_${LAMMPS_SIZES})
|
||||||
@ -24,6 +24,24 @@ function(validate_option name values)
|
|||||||
endif()
|
endif()
|
||||||
endfunction(validate_option)
|
endfunction(validate_option)
|
||||||
|
|
||||||
|
# helper function for getting the most recently modified file or folder from a glob pattern
|
||||||
|
function(get_newest_file path variable)
|
||||||
|
file(GLOB _dirs ${path})
|
||||||
|
set(_besttime 2000-01-01T00:00:00)
|
||||||
|
set(_bestfile "<unknown>")
|
||||||
|
foreach(_dir ${_dirs})
|
||||||
|
file(TIMESTAMP ${_dir} _newtime)
|
||||||
|
if(_newtime IS_NEWER_THAN _besttime)
|
||||||
|
set(_bestfile ${_dir})
|
||||||
|
set(_besttime ${_newtime})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
if(_bestfile STREQUAL "<unknown>")
|
||||||
|
message(FATAL_ERROR "Could not find valid path at: ${path}")
|
||||||
|
endif()
|
||||||
|
set(${variable} ${_bestfile} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
function(get_lammps_version version_header variable)
|
function(get_lammps_version version_header variable)
|
||||||
file(STRINGS ${version_header} line REGEX LAMMPS_VERSION)
|
file(STRINGS ${version_header} line REGEX LAMMPS_VERSION)
|
||||||
set(MONTHS x Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
|
set(MONTHS x Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
|
||||||
|
|||||||
@ -19,6 +19,10 @@ endif()
|
|||||||
|
|
||||||
add_library(colvars STATIC ${COLVARS_SOURCES})
|
add_library(colvars STATIC ${COLVARS_SOURCES})
|
||||||
target_compile_definitions(colvars PRIVATE -DCOLVARS_LAMMPS)
|
target_compile_definitions(colvars PRIVATE -DCOLVARS_LAMMPS)
|
||||||
|
separate_arguments(CMAKE_TUNE_FLAGS)
|
||||||
|
foreach(_FLAG ${CMAKE_TUNE_FLAGS})
|
||||||
|
target_compile_options(colvars PRIVATE ${_FLAG})
|
||||||
|
endforeach()
|
||||||
set_target_properties(colvars PROPERTIES OUTPUT_NAME lammps_colvars${LAMMPS_MACHINE})
|
set_target_properties(colvars PROPERTIES OUTPUT_NAME lammps_colvars${LAMMPS_MACHINE})
|
||||||
target_include_directories(colvars PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/colvars)
|
target_include_directories(colvars PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/colvars)
|
||||||
# The line below is needed to locate math_eigen_impl.h
|
# The line below is needed to locate math_eigen_impl.h
|
||||||
|
|||||||
@ -80,14 +80,14 @@ if(GPU_API STREQUAL "CUDA")
|
|||||||
# --arch translates directly instead of JIT, so this should be for the preferred or most common architecture
|
# --arch translates directly instead of JIT, so this should be for the preferred or most common architecture
|
||||||
set(GPU_CUDA_GENCODE "-arch=${GPU_ARCH}")
|
set(GPU_CUDA_GENCODE "-arch=${GPU_ARCH}")
|
||||||
|
|
||||||
# apply the following to build "fat" CUDA binaries only for known CUDA toolkits
|
# apply the following to build "fat" CUDA binaries only for known CUDA toolkits since version 8.0
|
||||||
if(CUDA_VERSION VERSION_GREATER_EQUAL "12.0")
|
# only the Kepler achitecture and beyond is supported
|
||||||
message(WARNING "Untested CUDA Toolkit version. Use at your own risk")
|
if(CUDA_VERSION VERSION_LESS 8.0)
|
||||||
|
message(FATAL_ERROR "CUDA Toolkit version 8.0 or later is required")
|
||||||
|
elseif(CUDA_VERSION VERSION_GREATER_EQUAL "12.0")
|
||||||
|
message(WARNING "Untested CUDA Toolkit version ${CUDA_VERSION}. Use at your own risk")
|
||||||
|
set(GPU_CUDA_GENCODE "-arch=all")
|
||||||
else()
|
else()
|
||||||
# Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0
|
|
||||||
if((CUDA_VERSION VERSION_GREATER_EQUAL "3.2") AND (CUDA_VERSION VERSION_LESS "9.0"))
|
|
||||||
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_20,code=[sm_20,compute_20] ")
|
|
||||||
endif()
|
|
||||||
# Kepler (GPU Arch 3.0) is supported by CUDA 5 to CUDA 10.2
|
# Kepler (GPU Arch 3.0) is supported by CUDA 5 to CUDA 10.2
|
||||||
if((CUDA_VERSION VERSION_GREATER_EQUAL "5.0") AND (CUDA_VERSION VERSION_LESS "11.0"))
|
if((CUDA_VERSION VERSION_GREATER_EQUAL "5.0") AND (CUDA_VERSION VERSION_LESS "11.0"))
|
||||||
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_30,code=[sm_30,compute_30] ")
|
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_30,code=[sm_30,compute_30] ")
|
||||||
@ -120,6 +120,14 @@ if(GPU_API STREQUAL "CUDA")
|
|||||||
if(CUDA_VERSION VERSION_GREATER_EQUAL "11.1")
|
if(CUDA_VERSION VERSION_GREATER_EQUAL "11.1")
|
||||||
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_86,code=[sm_86,compute_86]")
|
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_86,code=[sm_86,compute_86]")
|
||||||
endif()
|
endif()
|
||||||
|
# Hopper (GPU Arch 9.0) is supported by CUDA 12.0? and later
|
||||||
|
if(CUDA_VERSION VERSION_GREATER_EQUAL "12.0")
|
||||||
|
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_90,code=[sm_90,compute_90]")
|
||||||
|
endif()
|
||||||
|
# # Lovelace (GPU Arch 9.x) is supported by CUDA 12.0? and later
|
||||||
|
#if(CUDA_VERSION VERSION_GREATER_EQUAL "12.0")
|
||||||
|
# string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_9x,code=[sm_9x,compute_9x]")
|
||||||
|
#endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS ${CUDA_REQUEST_PIC}
|
cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS ${CUDA_REQUEST_PIC}
|
||||||
@ -225,7 +233,8 @@ elseif(GPU_API STREQUAL "OPENCL")
|
|||||||
elseif(GPU_API STREQUAL "HIP")
|
elseif(GPU_API STREQUAL "HIP")
|
||||||
if(NOT DEFINED HIP_PATH)
|
if(NOT DEFINED HIP_PATH)
|
||||||
if(NOT DEFINED ENV{HIP_PATH})
|
if(NOT DEFINED ENV{HIP_PATH})
|
||||||
set(HIP_PATH "/opt/rocm/hip" CACHE PATH "Path to HIP installation")
|
message(FATAL_ERROR "GPU_API=HIP requires HIP_PATH to be defined.\n"
|
||||||
|
"Either pass the HIP_PATH as a CMake option via -DHIP_PATH=... or set the HIP_PATH environment variable.")
|
||||||
else()
|
else()
|
||||||
set(HIP_PATH $ENV{HIP_PATH} CACHE PATH "Path to HIP installation")
|
set(HIP_PATH $ENV{HIP_PATH} CACHE PATH "Path to HIP installation")
|
||||||
endif()
|
endif()
|
||||||
@ -253,17 +262,21 @@ elseif(GPU_API STREQUAL "HIP")
|
|||||||
|
|
||||||
if(HIP_PLATFORM STREQUAL "hcc" OR HIP_PLATFORM STREQUAL "amd")
|
if(HIP_PLATFORM STREQUAL "hcc" OR HIP_PLATFORM STREQUAL "amd")
|
||||||
set(HIP_ARCH "gfx906" CACHE STRING "HIP target architecture")
|
set(HIP_ARCH "gfx906" CACHE STRING "HIP target architecture")
|
||||||
|
elseif(HIP_PLATFORM STREQUAL "spirv")
|
||||||
|
set(HIP_ARCH "spirv" CACHE STRING "HIP target architecture")
|
||||||
elseif(HIP_PLATFORM STREQUAL "nvcc")
|
elseif(HIP_PLATFORM STREQUAL "nvcc")
|
||||||
find_package(CUDA REQUIRED)
|
find_package(CUDA REQUIRED)
|
||||||
set(HIP_ARCH "sm_50" CACHE STRING "HIP primary CUDA architecture (e.g. sm_60)")
|
set(HIP_ARCH "sm_50" CACHE STRING "HIP primary CUDA architecture (e.g. sm_60)")
|
||||||
|
|
||||||
|
if(CUDA_VERSION VERSION_LESS 8.0)
|
||||||
|
message(FATAL_ERROR "CUDA Toolkit version 8.0 or later is required")
|
||||||
|
elseif(CUDA_VERSION VERSION_GREATER_EQUAL "12.0")
|
||||||
|
message(WARNING "Untested CUDA Toolkit version ${CUDA_VERSION}. Use at your own risk")
|
||||||
|
set(HIP_CUDA_GENCODE "-arch=all")
|
||||||
|
else()
|
||||||
# build arch/gencode commands for nvcc based on CUDA toolkit version and use choice
|
# build arch/gencode commands for nvcc based on CUDA toolkit version and use choice
|
||||||
# --arch translates directly instead of JIT, so this should be for the preferred or most common architecture
|
# --arch translates directly instead of JIT, so this should be for the preferred or most common architecture
|
||||||
set(HIP_CUDA_GENCODE "-arch=${HIP_ARCH}")
|
set(HIP_CUDA_GENCODE "-arch=${HIP_ARCH}")
|
||||||
# Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0
|
|
||||||
if((CUDA_VERSION VERSION_GREATER_EQUAL "3.2") AND (CUDA_VERSION VERSION_LESS "9.0"))
|
|
||||||
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_20,code=[sm_20,compute_20]")
|
|
||||||
endif()
|
|
||||||
# Kepler (GPU Arch 3.0) is supported by CUDA 5 to CUDA 10.2
|
# Kepler (GPU Arch 3.0) is supported by CUDA 5 to CUDA 10.2
|
||||||
if((CUDA_VERSION VERSION_GREATER_EQUAL "5.0") AND (CUDA_VERSION VERSION_LESS "11.0"))
|
if((CUDA_VERSION VERSION_GREATER_EQUAL "5.0") AND (CUDA_VERSION VERSION_LESS "11.0"))
|
||||||
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_30,code=[sm_30,compute_30]")
|
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_30,code=[sm_30,compute_30]")
|
||||||
@ -292,8 +305,10 @@ elseif(GPU_API STREQUAL "HIP")
|
|||||||
if(CUDA_VERSION VERSION_GREATER_EQUAL "11.0")
|
if(CUDA_VERSION VERSION_GREATER_EQUAL "11.0")
|
||||||
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_80,code=[sm_80,compute_80]")
|
string(APPEND HIP_CUDA_GENCODE " -gencode arch=compute_80,code=[sm_80,compute_80]")
|
||||||
endif()
|
endif()
|
||||||
|
# Hopper (GPU Arch 9.0) is supported by CUDA 12.0? and later
|
||||||
if(CUDA_VERSION VERSION_GREATER_EQUAL "12.0")
|
if(CUDA_VERSION VERSION_GREATER_EQUAL "12.0")
|
||||||
message(WARNING "Unsupported CUDA version. Use at your own risk.")
|
string(APPEND GPU_CUDA_GENCODE " -gencode arch=compute_90,code=[sm_90,compute_90]")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -328,6 +343,13 @@ elseif(GPU_API STREQUAL "HIP")
|
|||||||
VERBATIM COMMAND ${HIP_HIPCC_EXECUTABLE} --fatbin --use_fast_math -DUSE_HIP -D_${GPU_PREC_SETTING} -DLAMMPS_${LAMMPS_SIZES} ${HIP_CUDA_GENCODE} -I${LAMMPS_LIB_SOURCE_DIR}/gpu -o ${CUBIN_FILE} ${CU_FILE}
|
VERBATIM COMMAND ${HIP_HIPCC_EXECUTABLE} --fatbin --use_fast_math -DUSE_HIP -D_${GPU_PREC_SETTING} -DLAMMPS_${LAMMPS_SIZES} ${HIP_CUDA_GENCODE} -I${LAMMPS_LIB_SOURCE_DIR}/gpu -o ${CUBIN_FILE} ${CU_FILE}
|
||||||
DEPENDS ${CU_FILE}
|
DEPENDS ${CU_FILE}
|
||||||
COMMENT "Generating ${CU_NAME}.cubin")
|
COMMENT "Generating ${CU_NAME}.cubin")
|
||||||
|
elseif(HIP_PLATFORM STREQUAL "spirv")
|
||||||
|
configure_file(${CU_FILE} ${CU_CPP_FILE} COPYONLY)
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT ${CUBIN_FILE}
|
||||||
|
VERBATIM COMMAND ${HIP_HIPCC_EXECUTABLE} -c -O3 -DUSE_HIP -D_${GPU_PREC_SETTING} -DLAMMPS_${LAMMPS_SIZES} -I${LAMMPS_LIB_SOURCE_DIR}/gpu -o ${CUBIN_FILE} ${CU_CPP_FILE}
|
||||||
|
DEPENDS ${CU_CPP_FILE}
|
||||||
|
COMMENT "Gerating ${CU_NAME}.cubin")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_custom_command(OUTPUT ${CUBIN_H_FILE}
|
add_custom_command(OUTPUT ${CUBIN_H_FILE}
|
||||||
@ -347,6 +369,10 @@ elseif(GPU_API STREQUAL "HIP")
|
|||||||
target_link_libraries(gpu PRIVATE hip::host)
|
target_link_libraries(gpu PRIVATE hip::host)
|
||||||
|
|
||||||
if(HIP_USE_DEVICE_SORT)
|
if(HIP_USE_DEVICE_SORT)
|
||||||
|
if(HIP_PLATFORM STREQUAL "amd")
|
||||||
|
# newer version of ROCm (5.1+) require c++14 for rocprim
|
||||||
|
set_property(TARGET gpu PROPERTY CXX_STANDARD 14)
|
||||||
|
endif()
|
||||||
# add hipCUB
|
# add hipCUB
|
||||||
target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/../include)
|
target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/../include)
|
||||||
target_compile_definitions(gpu PRIVATE -DUSE_HIP_DEVICE_SORT)
|
target_compile_definitions(gpu PRIVATE -DUSE_HIP_DEVICE_SORT)
|
||||||
|
|||||||
@ -1,5 +1,14 @@
|
|||||||
enable_language(C)
|
enable_language(C)
|
||||||
|
|
||||||
|
# we don't use the parallel i/o interface.
|
||||||
|
set(HDF5_PREFER_PARALLEL FALSE)
|
||||||
|
|
||||||
find_package(HDF5 REQUIRED)
|
find_package(HDF5 REQUIRED)
|
||||||
|
|
||||||
|
# parallel HDF5 will import incompatible MPI headers with a serial build
|
||||||
|
if((NOT BUILD_MPI) AND HDF5_IS_PARALLEL)
|
||||||
|
message(FATAL_ERROR "Serial LAMMPS build and parallel HDF5 library are not compatible")
|
||||||
|
endif()
|
||||||
|
|
||||||
target_link_libraries(h5md PRIVATE ${HDF5_LIBRARIES})
|
target_link_libraries(h5md PRIVATE ${HDF5_LIBRARIES})
|
||||||
target_include_directories(h5md PUBLIC ${HDF5_INCLUDE_DIRS})
|
target_include_directories(h5md PUBLIC ${HDF5_INCLUDE_DIRS})
|
||||||
|
|||||||
@ -38,7 +38,7 @@ if(INTEL_LRT_MODE STREQUAL "C++11")
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
if((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") OR (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM"))
|
||||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16)
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16)
|
||||||
message(FATAL_ERROR "INTEL needs at least a 2016 Intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}")
|
message(FATAL_ERROR "INTEL needs at least a 2016 Intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}")
|
||||||
endif()
|
endif()
|
||||||
@ -46,12 +46,12 @@ else()
|
|||||||
message(WARNING "INTEL gives best performance with Intel compilers")
|
message(WARNING "INTEL gives best performance with Intel compilers")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(TBB_MALLOC QUIET)
|
find_package(TBB_MALLOC)
|
||||||
if(TBB_MALLOC_FOUND)
|
if(TBB_MALLOC_FOUND)
|
||||||
target_link_libraries(lammps PRIVATE TBB::TBB_MALLOC)
|
target_link_libraries(lammps PRIVATE TBB::TBB_MALLOC)
|
||||||
else()
|
else()
|
||||||
target_compile_definitions(lammps PRIVATE -DLMP_INTEL_NO_TBB)
|
target_compile_definitions(lammps PRIVATE -DLMP_INTEL_NO_TBB)
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
if((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") OR (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM"))
|
||||||
message(WARNING "INTEL with Intel compilers should use TBB malloc libraries")
|
message(WARNING "INTEL with Intel compilers should use TBB malloc libraries")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@ -112,5 +112,9 @@ if(PKG_KSPACE)
|
|||||||
RegisterIntegrateStyle(${INTEL_SOURCES_DIR}/verlet_lrt_intel.h)
|
RegisterIntegrateStyle(${INTEL_SOURCES_DIR}/verlet_lrt_intel.h)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(PKG_ELECTRODE)
|
||||||
|
list(APPEND INTEL_SOURCES ${INTEL_SOURCES_DIR}/electrode_accel_intel.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
target_sources(lammps PRIVATE ${INTEL_SOURCES})
|
target_sources(lammps PRIVATE ${INTEL_SOURCES})
|
||||||
target_include_directories(lammps PRIVATE ${INTEL_SOURCES_DIR})
|
target_include_directories(lammps PRIVATE ${INTEL_SOURCES_DIR})
|
||||||
|
|||||||
@ -47,8 +47,8 @@ if(DOWNLOAD_KOKKOS)
|
|||||||
list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS}")
|
list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS}")
|
||||||
list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}")
|
list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}")
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
set(KOKKOS_URL "https://github.com/kokkos/kokkos/archive/3.5.00.tar.gz" CACHE STRING "URL for KOKKOS tarball")
|
set(KOKKOS_URL "https://github.com/kokkos/kokkos/archive/3.6.01.tar.gz" CACHE STRING "URL for KOKKOS tarball")
|
||||||
set(KOKKOS_MD5 "079323d973ae0e1c38c0a54a150c674e" CACHE STRING "MD5 checksum of KOKKOS tarball")
|
set(KOKKOS_MD5 "0ec97fc0c356dd65bd2487defe81a7bf" CACHE STRING "MD5 checksum of KOKKOS tarball")
|
||||||
mark_as_advanced(KOKKOS_URL)
|
mark_as_advanced(KOKKOS_URL)
|
||||||
mark_as_advanced(KOKKOS_MD5)
|
mark_as_advanced(KOKKOS_MD5)
|
||||||
ExternalProject_Add(kokkos_build
|
ExternalProject_Add(kokkos_build
|
||||||
@ -72,7 +72,7 @@ if(DOWNLOAD_KOKKOS)
|
|||||||
add_dependencies(LAMMPS::KOKKOSCORE kokkos_build)
|
add_dependencies(LAMMPS::KOKKOSCORE kokkos_build)
|
||||||
add_dependencies(LAMMPS::KOKKOSCONTAINERS kokkos_build)
|
add_dependencies(LAMMPS::KOKKOSCONTAINERS kokkos_build)
|
||||||
elseif(EXTERNAL_KOKKOS)
|
elseif(EXTERNAL_KOKKOS)
|
||||||
find_package(Kokkos 3.5.00 REQUIRED CONFIG)
|
find_package(Kokkos 3.6.01 REQUIRED CONFIG)
|
||||||
target_link_libraries(lammps PRIVATE Kokkos::kokkos)
|
target_link_libraries(lammps PRIVATE Kokkos::kokkos)
|
||||||
target_link_libraries(lmp PRIVATE Kokkos::kokkos)
|
target_link_libraries(lmp PRIVATE Kokkos::kokkos)
|
||||||
else()
|
else()
|
||||||
@ -130,6 +130,11 @@ if(PKG_KSPACE)
|
|||||||
target_compile_definitions(lammps PRIVATE -DFFT_CUFFT)
|
target_compile_definitions(lammps PRIVATE -DFFT_CUFFT)
|
||||||
target_link_libraries(lammps PRIVATE cufft)
|
target_link_libraries(lammps PRIVATE cufft)
|
||||||
endif()
|
endif()
|
||||||
|
elseif(Kokkos_ENABLE_HIP)
|
||||||
|
if(NOT (FFT STREQUAL "KISS"))
|
||||||
|
target_compile_definitions(lammps PRIVATE -DFFT_HIPFFT)
|
||||||
|
target_link_libraries(lammps PRIVATE hipfft)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@ -23,8 +23,9 @@ if(DOWNLOAD_LATTE)
|
|||||||
# CMake cannot pass BLAS or LAPACK library variable to external project if they are a list
|
# CMake cannot pass BLAS or LAPACK library variable to external project if they are a list
|
||||||
list(LENGTH BLAS_LIBRARIES} NUM_BLAS)
|
list(LENGTH BLAS_LIBRARIES} NUM_BLAS)
|
||||||
list(LENGTH LAPACK_LIBRARIES NUM_LAPACK)
|
list(LENGTH LAPACK_LIBRARIES NUM_LAPACK)
|
||||||
if((NUM_BLAS GREATER 1) OR (NUM_LAPACK GREATER 1))
|
if((NUM_BLAS GREATER 1) OR (NUM_LAPACK GREATER 1) AND NOT USE_INTERNAL_LINALG)
|
||||||
message(FATAL_ERROR "Cannot compile downloaded LATTE library due to a technical limitation")
|
message(FATAL_ERROR "Cannot compile downloaded LATTE library due to a technical limitation. "
|
||||||
|
"Try to configure LAMMPS with '-D USE_INTERNAL_LINALG=on' added as a workaround.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
|
|||||||
@ -36,3 +36,5 @@ endif()
|
|||||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "PGI") OR (CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC"))
|
if((CMAKE_CXX_COMPILER_ID STREQUAL "PGI") OR (CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC"))
|
||||||
target_compile_definitions(lammps PRIVATE -DEIGEN_DONT_VECTORIZE)
|
target_compile_definitions(lammps PRIVATE -DEIGEN_DONT_VECTORIZE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
target_compile_definitions(lammps PRIVATE -DEIGEN_NO_CUDA)
|
||||||
|
|||||||
@ -8,8 +8,8 @@ option(DOWNLOAD_MDI "Download and compile the MDI library instead of using an al
|
|||||||
|
|
||||||
if(DOWNLOAD_MDI)
|
if(DOWNLOAD_MDI)
|
||||||
message(STATUS "MDI download requested - we will build our own")
|
message(STATUS "MDI download requested - we will build our own")
|
||||||
set(MDI_URL "https://github.com/MolSSI-MDI/MDI_Library/archive/v1.2.9.tar.gz" CACHE STRING "URL for MDI tarball")
|
set(MDI_URL "https://github.com/MolSSI-MDI/MDI_Library/archive/v1.4.1.tar.gz" CACHE STRING "URL for MDI tarball")
|
||||||
set(MDI_MD5 "ddfa46d6ee15b4e59cfd527ec7212184" CACHE STRING "MD5 checksum for MDI tarball")
|
set(MDI_MD5 "f9505fccd4c79301a619f6452dad4ad9" CACHE STRING "MD5 checksum for MDI tarball")
|
||||||
mark_as_advanced(MDI_URL)
|
mark_as_advanced(MDI_URL)
|
||||||
mark_as_advanced(MDI_MD5)
|
mark_as_advanced(MDI_MD5)
|
||||||
enable_language(C)
|
enable_language(C)
|
||||||
@ -26,8 +26,21 @@ if(DOWNLOAD_MDI)
|
|||||||
# detect if we have python development support and thus can enable python plugins
|
# detect if we have python development support and thus can enable python plugins
|
||||||
set(MDI_USE_PYTHON_PLUGINS OFF)
|
set(MDI_USE_PYTHON_PLUGINS OFF)
|
||||||
if(CMAKE_VERSION VERSION_LESS 3.12)
|
if(CMAKE_VERSION VERSION_LESS 3.12)
|
||||||
|
if(NOT PYTHON_VERSION_STRING)
|
||||||
|
set(Python_ADDITIONAL_VERSIONS 3.12 3.11 3.10 3.9 3.8 3.7 3.6)
|
||||||
|
# search for interpreter first, so we have a consistent library
|
||||||
|
find_package(PythonInterp) # Deprecated since version 3.12
|
||||||
|
if(PYTHONINTERP_FOUND)
|
||||||
|
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
# search for the library matching the selected interpreter
|
||||||
|
set(Python_ADDITIONAL_VERSIONS ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
|
||||||
find_package(PythonLibs QUIET) # Deprecated since version 3.12
|
find_package(PythonLibs QUIET) # Deprecated since version 3.12
|
||||||
if(PYTHONLIBS_FOUND)
|
if(PYTHONLIBS_FOUND)
|
||||||
|
if(NOT (PYTHON_VERSION_STRING STREQUAL PYTHONLIBS_VERSION_STRING))
|
||||||
|
message(FATAL_ERROR "Python Library version ${PYTHONLIBS_VERSION_STRING} does not match Interpreter version ${PYTHON_VERSION_STRING}")
|
||||||
|
endif()
|
||||||
set(MDI_USE_PYTHON_PLUGINS ON)
|
set(MDI_USE_PYTHON_PLUGINS ON)
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
@ -44,15 +57,17 @@ if(DOWNLOAD_MDI)
|
|||||||
ExternalProject_Add(mdi_build
|
ExternalProject_Add(mdi_build
|
||||||
URL ${MDI_URL}
|
URL ${MDI_URL}
|
||||||
URL_MD5 ${MDI_MD5}
|
URL_MD5 ${MDI_MD5}
|
||||||
CMAKE_ARGS ${CMAKE_REQUEST_PIC}
|
CMAKE_ARGS
|
||||||
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
|
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
|
||||||
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||||
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||||
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
|
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
|
||||||
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
||||||
|
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
||||||
-Dlanguage=C
|
-Dlanguage=C
|
||||||
-Dlibtype=STATIC
|
-Dlibtype=STATIC
|
||||||
-Dmpi=${MDI_USE_MPI}
|
-Dmpi=${MDI_USE_MPI}
|
||||||
|
-Dplugins=ON
|
||||||
-Dpython_plugins=${MDI_USE_PYTHON_PLUGINS}
|
-Dpython_plugins=${MDI_USE_PYTHON_PLUGINS}
|
||||||
UPDATE_COMMAND ""
|
UPDATE_COMMAND ""
|
||||||
INSTALL_COMMAND ""
|
INSTALL_COMMAND ""
|
||||||
|
|||||||
@ -1,31 +0,0 @@
|
|||||||
if(LAMMPS_SIZES STREQUAL "BIGBIG")
|
|
||||||
message(FATAL_ERROR "The MESSAGE Package is not compatible with -DLAMMPS_BIGBIG")
|
|
||||||
endif()
|
|
||||||
option(MESSAGE_ZMQ "Use ZeroMQ in MESSAGE package" OFF)
|
|
||||||
file(GLOB_RECURSE cslib_SOURCES
|
|
||||||
${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.cpp)
|
|
||||||
|
|
||||||
add_library(cslib STATIC ${cslib_SOURCES})
|
|
||||||
target_compile_definitions(cslib PRIVATE -DLAMMPS_${LAMMPS_SIZES})
|
|
||||||
set_target_properties(cslib PROPERTIES OUTPUT_NAME lammps_cslib${LAMMPS_MACHINE})
|
|
||||||
if(BUILD_MPI)
|
|
||||||
target_compile_definitions(cslib PRIVATE -DMPI_YES)
|
|
||||||
set_target_properties(cslib PROPERTIES OUTPUT_NAME "csmpi")
|
|
||||||
target_link_libraries(cslib PRIVATE MPI::MPI_CXX)
|
|
||||||
else()
|
|
||||||
target_compile_definitions(cslib PRIVATE -DMPI_NO)
|
|
||||||
target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_MPI)
|
|
||||||
set_target_properties(cslib PROPERTIES OUTPUT_NAME "csnompi")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(MESSAGE_ZMQ)
|
|
||||||
target_compile_definitions(cslib PRIVATE -DZMQ_YES)
|
|
||||||
find_package(ZMQ REQUIRED)
|
|
||||||
target_link_libraries(cslib PUBLIC ZMQ::ZMQ)
|
|
||||||
else()
|
|
||||||
target_compile_definitions(cslib PRIVATE -DZMQ_NO)
|
|
||||||
target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_ZMQ)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_link_libraries(lammps PRIVATE cslib)
|
|
||||||
target_include_directories(lammps PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src)
|
|
||||||
13
cmake/Modules/Packages/MISC.cmake
Normal file
13
cmake/Modules/Packages/MISC.cmake
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# pair style and fix srp/react depend on the fixes bond/break and bond/create from the MC package
|
||||||
|
if(NOT PKG_MC)
|
||||||
|
get_property(LAMMPS_FIX_HEADERS GLOBAL PROPERTY FIX)
|
||||||
|
list(REMOVE_ITEM LAMMPS_FIX_HEADERS ${LAMMPS_SOURCE_DIR}/MISC/fix_srp_react.h)
|
||||||
|
set_property(GLOBAL PROPERTY FIX "${LAMMPS_FIX_HEADERS}")
|
||||||
|
get_property(LAMMPS_PAIR_HEADERS GLOBAL PROPERTY PAIR)
|
||||||
|
list(REMOVE_ITEM LAMMPS_PAIR_HEADERS ${LAMMPS_SOURCE_DIR}/MISC/pair_srp_react.h)
|
||||||
|
set_property(GLOBAL PROPERTY PAIR "${LAMMPS_PAIR_HEADERS}")
|
||||||
|
get_target_property(LAMMPS_SOURCES lammps SOURCES)
|
||||||
|
list(REMOVE_ITEM LAMMPS_SOURCES ${LAMMPS_SOURCE_DIR}/MISC/fix_srp_react.cpp)
|
||||||
|
list(REMOVE_ITEM LAMMPS_SOURCES ${LAMMPS_SOURCE_DIR}/MISC/pair_srp_react.cpp)
|
||||||
|
set_property(TARGET lammps PROPERTY SOURCES "${LAMMPS_SOURCES}")
|
||||||
|
endif()
|
||||||
@ -42,15 +42,11 @@ if(DOWNLOAD_N2P2)
|
|||||||
if(NOT BUILD_MPI)
|
if(NOT BUILD_MPI)
|
||||||
set(N2P2_PROJECT_OPTIONS "-DN2P2_NO_MPI")
|
set(N2P2_PROJECT_OPTIONS "-DN2P2_NO_MPI")
|
||||||
else()
|
else()
|
||||||
# get path to MPI include directory when cross-compiling to windows
|
# get path to MPI include directory
|
||||||
if((CMAKE_SYSTEM_NAME STREQUAL Windows) AND CMAKE_CROSSCOMPILING)
|
|
||||||
get_target_property(N2P2_MPI_INCLUDE MPI::MPI_CXX INTERFACE_INCLUDE_DIRECTORIES)
|
get_target_property(N2P2_MPI_INCLUDE MPI::MPI_CXX INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
set(N2P2_PROJECT_OPTIONS "-I${N2P2_MPI_INCLUDE}")
|
foreach (_INCL ${N2P2_MPI_INCLUDE})
|
||||||
endif()
|
set(N2P2_PROJECT_OPTIONS "${N2P2_PROJECT_OPTIONS} -I${_INCL}")
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
endforeach()
|
||||||
get_target_property(N2P2_MPI_INCLUDE MPI::MPI_CXX INTERFACE_INCLUDE_DIRECTORIES)
|
|
||||||
set(N2P2_PROJECT_OPTIONS "-I${N2P2_MPI_INCLUDE}")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# prefer GNU make, if available. N2P2 lib seems to need it.
|
# prefer GNU make, if available. N2P2 lib seems to need it.
|
||||||
@ -81,7 +77,7 @@ if(DOWNLOAD_N2P2)
|
|||||||
UPDATE_COMMAND ""
|
UPDATE_COMMAND ""
|
||||||
CONFIGURE_COMMAND ""
|
CONFIGURE_COMMAND ""
|
||||||
PATCH_COMMAND sed -i -e "s/\\(MPI_\\(P\\|Unp\\)ack(\\)/\\1(void *) /" src/libnnpif/LAMMPS/InterfaceLammps.cpp
|
PATCH_COMMAND sed -i -e "s/\\(MPI_\\(P\\|Unp\\)ack(\\)/\\1(void *) /" src/libnnpif/LAMMPS/InterfaceLammps.cpp
|
||||||
BUILD_COMMAND ${N2P2_MAKE} -f makefile libnnpif ${N2P2_BUILD_OPTIONS}
|
BUILD_COMMAND ${N2P2_MAKE} -C <SOURCE_DIR>/src -f makefile libnnpif ${N2P2_BUILD_OPTIONS}
|
||||||
BUILD_ALWAYS YES
|
BUILD_ALWAYS YES
|
||||||
INSTALL_COMMAND ""
|
INSTALL_COMMAND ""
|
||||||
BUILD_IN_SOURCE 1
|
BUILD_IN_SOURCE 1
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.tar.gz" CACHE STRING "URL for PACE evaluator library sources")
|
set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.fix2.tar.gz" CACHE STRING "URL for PACE evaluator library sources")
|
||||||
|
|
||||||
set(PACELIB_MD5 "a2ac3315c41a1a4a5c912bcb1bc9c5cc" CACHE STRING "MD5 checksum of PACE evaluator library tarball")
|
set(PACELIB_MD5 "32394d799bc282bb57696c78c456e64f" CACHE STRING "MD5 checksum of PACE evaluator library tarball")
|
||||||
mark_as_advanced(PACELIB_URL)
|
mark_as_advanced(PACELIB_URL)
|
||||||
mark_as_advanced(PACELIB_MD5)
|
mark_as_advanced(PACELIB_MD5)
|
||||||
|
|
||||||
@ -13,8 +13,12 @@ execute_process(
|
|||||||
COMMAND ${CMAKE_COMMAND} -E tar xzf libpace.tar.gz
|
COMMAND ${CMAKE_COMMAND} -E tar xzf libpace.tar.gz
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
)
|
)
|
||||||
|
get_newest_file(${CMAKE_BINARY_DIR}/lammps-user-pace-* lib-pace)
|
||||||
|
|
||||||
file(GLOB lib-pace ${CMAKE_BINARY_DIR}/lammps-user-pace-*)
|
# enforce building libyaml-cpp as static library and turn off optional features
|
||||||
|
set(YAML_BUILD_SHARED_LIBS OFF)
|
||||||
|
set(YAML_CPP_BUILD_CONTRIB OFF)
|
||||||
|
set(YAML_CPP_BUILD_TOOLS OFF)
|
||||||
add_subdirectory(${lib-pace}/yaml-cpp build-yaml-cpp)
|
add_subdirectory(${lib-pace}/yaml-cpp build-yaml-cpp)
|
||||||
set(YAML_CPP_INCLUDE_DIR ${lib-pace}/yaml-cpp/include)
|
set(YAML_CPP_INCLUDE_DIR ${lib-pace}/yaml-cpp/include)
|
||||||
|
|
||||||
@ -28,5 +32,6 @@ target_include_directories(pace PUBLIC ${PACE_EVALUATOR_INCLUDE_DIR} ${YAML_CPP_
|
|||||||
|
|
||||||
|
|
||||||
target_link_libraries(pace PRIVATE yaml-cpp-pace)
|
target_link_libraries(pace PRIVATE yaml-cpp-pace)
|
||||||
|
if(CMAKE_PROJECT_NAME STREQUAL "lammps")
|
||||||
target_link_libraries(lammps PRIVATE pace)
|
target_link_libraries(lammps PRIVATE pace)
|
||||||
|
endif()
|
||||||
|
|||||||
@ -43,6 +43,7 @@ if(DOWNLOAD_QUIP)
|
|||||||
file(WRITE ${CMAKE_BINARY_DIR}/quip.config "${temp}")
|
file(WRITE ${CMAKE_BINARY_DIR}/quip.config "${temp}")
|
||||||
|
|
||||||
message(STATUS "QUIP download via git requested - we will build our own")
|
message(STATUS "QUIP download via git requested - we will build our own")
|
||||||
|
set(CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY CHECKOUT)
|
||||||
# QUIP has no releases (except for a tag marking the end of Python 2 support). We use the current "public" branch
|
# QUIP has no releases (except for a tag marking the end of Python 2 support). We use the current "public" branch
|
||||||
# The LAMMPS interface wrapper has a compatibility constant that is being checked at runtime.
|
# The LAMMPS interface wrapper has a compatibility constant that is being checked at runtime.
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
|
|||||||
@ -1,8 +1,28 @@
|
|||||||
if(CMAKE_VERSION VERSION_LESS 3.12)
|
if(CMAKE_VERSION VERSION_LESS 3.12)
|
||||||
|
if(NOT PYTHON_VERSION_STRING)
|
||||||
|
set(Python_ADDITIONAL_VERSIONS 3.12 3.11 3.10 3.9 3.8 3.7 3.6)
|
||||||
|
# search for interpreter first, so we have a consistent library
|
||||||
|
find_package(PythonInterp) # Deprecated since version 3.12
|
||||||
|
if(PYTHONINTERP_FOUND)
|
||||||
|
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
# search for the library matching the selected interpreter
|
||||||
|
set(Python_ADDITIONAL_VERSIONS ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
|
||||||
find_package(PythonLibs REQUIRED) # Deprecated since version 3.12
|
find_package(PythonLibs REQUIRED) # Deprecated since version 3.12
|
||||||
|
if(NOT (PYTHON_VERSION_STRING STREQUAL PYTHONLIBS_VERSION_STRING))
|
||||||
|
message(FATAL_ERROR "Python Library version ${PYTHONLIBS_VERSION_STRING} does not match Interpreter version ${PYTHON_VERSION_STRING}")
|
||||||
|
endif()
|
||||||
target_include_directories(lammps PRIVATE ${PYTHON_INCLUDE_DIRS})
|
target_include_directories(lammps PRIVATE ${PYTHON_INCLUDE_DIRS})
|
||||||
target_link_libraries(lammps PRIVATE ${PYTHON_LIBRARIES})
|
target_link_libraries(lammps PRIVATE ${PYTHON_LIBRARIES})
|
||||||
else()
|
else()
|
||||||
|
if(NOT Python_INTERPRETER)
|
||||||
|
# backward compatibility
|
||||||
|
if(PYTHON_EXECUTABLE)
|
||||||
|
set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
|
||||||
|
endif()
|
||||||
|
find_package(Python COMPONENTS Interpreter)
|
||||||
|
endif()
|
||||||
find_package(Python REQUIRED COMPONENTS Interpreter Development)
|
find_package(Python REQUIRED COMPONENTS Interpreter Development)
|
||||||
target_link_libraries(lammps PRIVATE Python::Python)
|
target_link_libraries(lammps PRIVATE Python::Python)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@ -3,6 +3,9 @@ if(BUILD_TOOLS)
|
|||||||
target_compile_definitions(binary2txt PRIVATE -DLAMMPS_${LAMMPS_SIZES})
|
target_compile_definitions(binary2txt PRIVATE -DLAMMPS_${LAMMPS_SIZES})
|
||||||
install(TARGETS binary2txt DESTINATION ${CMAKE_INSTALL_BINDIR})
|
install(TARGETS binary2txt DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||||
|
|
||||||
|
add_executable(stl_bin2txt ${LAMMPS_TOOLS_DIR}/stl_bin2txt.cpp)
|
||||||
|
install(TARGETS stl_bin2txt DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||||
|
|
||||||
include(CheckGeneratorSupport)
|
include(CheckGeneratorSupport)
|
||||||
if(CMAKE_GENERATOR_SUPPORT_FORTRAN)
|
if(CMAKE_GENERATOR_SUPPORT_FORTRAN)
|
||||||
include(CheckLanguage)
|
include(CheckLanguage)
|
||||||
|
|||||||
@ -31,5 +31,7 @@ set(temp "${temp}const char *LAMMPS_NS::LAMMPS::git_descriptor() { return \"${te
|
|||||||
set(temp "${temp}#endif\n\n")
|
set(temp "${temp}#endif\n\n")
|
||||||
|
|
||||||
message(STATUS "Generating lmpgitversion.h...")
|
message(STATUS "Generating lmpgitversion.h...")
|
||||||
file(WRITE "${LAMMPS_STYLE_HEADERS_DIR}/lmpgitversion.h.tmp" "${temp}" )
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LAMMPS_STYLE_HEADERS_DIR}/lmpgitversion.h.tmp" "${LAMMPS_STYLE_HEADERS_DIR}/lmpgitversion.h")
|
string(REPLACE "\\ " " " LAMMPS_GIT_HEADER "${LAMMPS_STYLE_HEADERS_DIR}/lmpgitversion.h")
|
||||||
|
file(WRITE "${LAMMPS_GIT_HEADER}.tmp" "${temp}" )
|
||||||
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LAMMPS_GIT_HEADER}.tmp" "${LAMMPS_GIT_HEADER}")
|
||||||
|
|||||||
@ -3,14 +3,16 @@
|
|||||||
|
|
||||||
set(ALL_PACKAGES
|
set(ALL_PACKAGES
|
||||||
ADIOS
|
ADIOS
|
||||||
|
AMOEBA
|
||||||
ASPHERE
|
ASPHERE
|
||||||
ATC
|
ATC
|
||||||
AWPMD
|
AWPMD
|
||||||
BOCS
|
BOCS
|
||||||
BODY
|
BODY
|
||||||
|
BPM
|
||||||
BROWNIAN
|
BROWNIAN
|
||||||
CG-DNA
|
CG-DNA
|
||||||
CG-SDK
|
CG-SPICA
|
||||||
CLASS2
|
CLASS2
|
||||||
COLLOID
|
COLLOID
|
||||||
COLVARS
|
COLVARS
|
||||||
@ -24,6 +26,7 @@ set(ALL_PACKAGES
|
|||||||
DPD-REACT
|
DPD-REACT
|
||||||
DPD-SMOOTH
|
DPD-SMOOTH
|
||||||
DRUDE
|
DRUDE
|
||||||
|
ELECTRODE
|
||||||
EFF
|
EFF
|
||||||
EXTRA-COMPUTE
|
EXTRA-COMPUTE
|
||||||
EXTRA-DUMP
|
EXTRA-DUMP
|
||||||
@ -48,7 +51,6 @@ set(ALL_PACKAGES
|
|||||||
MDI
|
MDI
|
||||||
MEAM
|
MEAM
|
||||||
MESONT
|
MESONT
|
||||||
MESSAGE
|
|
||||||
MGPT
|
MGPT
|
||||||
MISC
|
MISC
|
||||||
ML-HDNNP
|
ML-HDNNP
|
||||||
|
|||||||
@ -5,14 +5,16 @@
|
|||||||
|
|
||||||
set(ALL_PACKAGES
|
set(ALL_PACKAGES
|
||||||
ADIOS
|
ADIOS
|
||||||
|
AMOEBA
|
||||||
ASPHERE
|
ASPHERE
|
||||||
ATC
|
ATC
|
||||||
AWPMD
|
AWPMD
|
||||||
BOCS
|
BOCS
|
||||||
BODY
|
BODY
|
||||||
|
BPM
|
||||||
BROWNIAN
|
BROWNIAN
|
||||||
CG-DNA
|
CG-DNA
|
||||||
CG-SDK
|
CG-SPICA
|
||||||
CLASS2
|
CLASS2
|
||||||
COLLOID
|
COLLOID
|
||||||
COLVARS
|
COLVARS
|
||||||
@ -26,6 +28,7 @@ set(ALL_PACKAGES
|
|||||||
DPD-REACT
|
DPD-REACT
|
||||||
DPD-SMOOTH
|
DPD-SMOOTH
|
||||||
DRUDE
|
DRUDE
|
||||||
|
ELECTRODE
|
||||||
EFF
|
EFF
|
||||||
EXTRA-COMPUTE
|
EXTRA-COMPUTE
|
||||||
EXTRA-DUMP
|
EXTRA-DUMP
|
||||||
@ -50,7 +53,6 @@ set(ALL_PACKAGES
|
|||||||
MDI
|
MDI
|
||||||
MEAM
|
MEAM
|
||||||
MESONT
|
MESONT
|
||||||
MESSAGE
|
|
||||||
MGPT
|
MGPT
|
||||||
MISC
|
MISC
|
||||||
ML-HDNNP
|
ML-HDNNP
|
||||||
|
|||||||
@ -3,9 +3,9 @@
|
|||||||
# that is compatible with all higher CC, but not the default CC 3.5
|
# that is compatible with all higher CC, but not the default CC 3.5
|
||||||
set(PKG_KOKKOS ON CACHE BOOL "" FORCE)
|
set(PKG_KOKKOS ON CACHE BOOL "" FORCE)
|
||||||
set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE)
|
set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE)
|
||||||
set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "" FORCE)
|
|
||||||
set(Kokkos_ENABLE_CUDA ON CACHE BOOL "" FORCE)
|
set(Kokkos_ENABLE_CUDA ON CACHE BOOL "" FORCE)
|
||||||
set(Kokkos_ARCH_MAXWELL50 on CACHE BOOL "" FORCE)
|
set(Kokkos_ARCH_PASCAL60 ON CACHE BOOL "" FORCE)
|
||||||
set(BUILD_OMP ON CACHE BOOL "" FORCE)
|
set(BUILD_OMP ON CACHE BOOL "" FORCE)
|
||||||
get_filename_component(NVCC_WRAPPER_CMD ${CMAKE_CURRENT_SOURCE_DIR}/../lib/kokkos/bin/nvcc_wrapper ABSOLUTE)
|
|
||||||
set(CMAKE_CXX_COMPILER ${NVCC_WRAPPER_CMD} CACHE FILEPATH "" FORCE)
|
# hide deprecation warnings temporarily for stable release
|
||||||
|
set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE)
|
||||||
|
|||||||
20
cmake/presets/kokkos-hip.cmake
Normal file
20
cmake/presets/kokkos-hip.cmake
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# preset that enables KOKKOS and selects HIP compilation with OpenMP
|
||||||
|
# enabled as well. Also sets some performance related compiler flags.
|
||||||
|
set(PKG_KOKKOS ON CACHE BOOL "" FORCE)
|
||||||
|
set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE)
|
||||||
|
set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "" FORCE)
|
||||||
|
set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE)
|
||||||
|
set(Kokkos_ENABLE_HIP ON CACHE BOOL "" FORCE)
|
||||||
|
set(Kokkos_ARCH_VEGA90A on CACHE BOOL "" FORCE)
|
||||||
|
set(Kokkos_ENABLE_HIP_MULTIPLE_KERNEL_INSTANTIATIONS ON CACHE BOOL "" FORCE)
|
||||||
|
set(BUILD_OMP ON CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_COMPILER hipcc CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_TUNE_FLAGS "-munsafe-fp-atomics" CACHE STRING "" FORCE)
|
||||||
|
|
||||||
|
# hide deprecation warnings temporarily for stable release
|
||||||
|
set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
|
# these flags are needed to build with Cray MPICH on OLCF Crusher
|
||||||
|
#-D CMAKE_CXX_FLAGS="-I/${MPICH_DIR}/include"
|
||||||
|
#-D MPI_CXX_LIBRARIES="-L${MPICH_DIR}/lib -lmpi -L${CRAY_MPICH_ROOTDIR}/gtl/lib -lmpi_gtl_hsa"
|
||||||
@ -4,3 +4,6 @@ set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE)
|
|||||||
set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "" FORCE)
|
set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "" FORCE)
|
||||||
set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE)
|
set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE)
|
||||||
set(BUILD_OMP ON CACHE BOOL "" FORCE)
|
set(BUILD_OMP ON CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
|
# hide deprecation warnings temporarily for stable release
|
||||||
|
set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE)
|
||||||
|
|||||||
@ -3,3 +3,6 @@ set(PKG_KOKKOS ON CACHE BOOL "" FORCE)
|
|||||||
set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE)
|
set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE)
|
||||||
set(Kokkos_ENABLE_OPENMP OFF CACHE BOOL "" FORCE)
|
set(Kokkos_ENABLE_OPENMP OFF CACHE BOOL "" FORCE)
|
||||||
set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE)
|
set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
|
# hide deprecation warnings temporarily for stable release
|
||||||
|
set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE)
|
||||||
|
|||||||
18
cmake/presets/kokkos-sycl.cmake
Normal file
18
cmake/presets/kokkos-sycl.cmake
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# preset that enables KOKKOS and selects SYCL compilation with OpenMP
|
||||||
|
# enabled as well. Also sets some performance related compiler flags.
|
||||||
|
set(PKG_KOKKOS ON CACHE BOOL "" FORCE)
|
||||||
|
set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE)
|
||||||
|
set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "" FORCE)
|
||||||
|
set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE)
|
||||||
|
set(Kokkos_ENABLE_SYCL ON CACHE BOOL "" FORCE)
|
||||||
|
set(Kokkos_ARCH_MAXWELL50 on CACHE BOOL "" FORCE)
|
||||||
|
set(BUILD_OMP ON CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
|
# hide deprecation warnings temporarily for stable release
|
||||||
|
set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_COMPILER clang++ CACHE STRING "" FORCE)
|
||||||
|
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "-Xsycl-target-frontend -O3" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_TUNE_FLAGS "-fgpu-inline-threshold=100000 -Xsycl-target-frontend -O3 -Xsycl-target-frontend -ffp-contract=on -Wno-unknown-cuda-version" CACHE STRING "" FORCE)
|
||||||
@ -1,12 +1,14 @@
|
|||||||
set(WIN_PACKAGES
|
set(WIN_PACKAGES
|
||||||
|
AMOEBA
|
||||||
ASPHERE
|
ASPHERE
|
||||||
ATC
|
ATC
|
||||||
AWPMD
|
AWPMD
|
||||||
BOCS
|
BOCS
|
||||||
BODY
|
BODY
|
||||||
|
BPM
|
||||||
BROWNIAN
|
BROWNIAN
|
||||||
CG-DNA
|
CG-DNA
|
||||||
CG-SDK
|
CG-SPICA
|
||||||
CLASS2
|
CLASS2
|
||||||
COLLOID
|
COLLOID
|
||||||
COLVARS
|
COLVARS
|
||||||
@ -20,6 +22,7 @@ set(WIN_PACKAGES
|
|||||||
DPD-REACT
|
DPD-REACT
|
||||||
DPD-SMOOTH
|
DPD-SMOOTH
|
||||||
DRUDE
|
DRUDE
|
||||||
|
ELECTRODE
|
||||||
EFF
|
EFF
|
||||||
EXTRA-COMPUTE
|
EXTRA-COMPUTE
|
||||||
EXTRA-DUMP
|
EXTRA-DUMP
|
||||||
@ -44,8 +47,8 @@ set(WIN_PACKAGES
|
|||||||
MISC
|
MISC
|
||||||
ML-HDNNP
|
ML-HDNNP
|
||||||
ML-IAP
|
ML-IAP
|
||||||
ML-SNAP
|
|
||||||
ML-RANN
|
ML-RANN
|
||||||
|
ML-SNAP
|
||||||
MOFFF
|
MOFFF
|
||||||
MOLECULE
|
MOLECULE
|
||||||
MOLFILE
|
MOLFILE
|
||||||
@ -54,6 +57,7 @@ set(WIN_PACKAGES
|
|||||||
ORIENT
|
ORIENT
|
||||||
PERI
|
PERI
|
||||||
PHONON
|
PHONON
|
||||||
|
PLUGIN
|
||||||
POEMS
|
POEMS
|
||||||
PTM
|
PTM
|
||||||
QEQ
|
QEQ
|
||||||
|
|||||||
@ -3,12 +3,14 @@
|
|||||||
# are removed. The resulting binary should be able to run most inputs.
|
# are removed. The resulting binary should be able to run most inputs.
|
||||||
|
|
||||||
set(ALL_PACKAGES
|
set(ALL_PACKAGES
|
||||||
|
AMOEBA
|
||||||
ASPHERE
|
ASPHERE
|
||||||
BOCS
|
BOCS
|
||||||
BODY
|
BODY
|
||||||
|
BPM
|
||||||
BROWNIAN
|
BROWNIAN
|
||||||
CG-DNA
|
CG-DNA
|
||||||
CG-SDK
|
CG-SPICA
|
||||||
CLASS2
|
CLASS2
|
||||||
COLLOID
|
COLLOID
|
||||||
COLVARS
|
COLVARS
|
||||||
@ -22,6 +24,7 @@ set(ALL_PACKAGES
|
|||||||
DPD-REACT
|
DPD-REACT
|
||||||
DPD-SMOOTH
|
DPD-SMOOTH
|
||||||
DRUDE
|
DRUDE
|
||||||
|
ELECTRODE
|
||||||
EFF
|
EFF
|
||||||
EXTRA-COMPUTE
|
EXTRA-COMPUTE
|
||||||
EXTRA-DUMP
|
EXTRA-DUMP
|
||||||
|
|||||||
@ -6,6 +6,7 @@ set(PACKAGES_WITH_LIB
|
|||||||
ATC
|
ATC
|
||||||
AWPMD
|
AWPMD
|
||||||
COMPRESS
|
COMPRESS
|
||||||
|
ELECTRODE
|
||||||
GPU
|
GPU
|
||||||
H5MD
|
H5MD
|
||||||
KIM
|
KIM
|
||||||
@ -15,7 +16,6 @@ set(PACKAGES_WITH_LIB
|
|||||||
MACHDYN
|
MACHDYN
|
||||||
MDI
|
MDI
|
||||||
MESONT
|
MESONT
|
||||||
MESSAGE
|
|
||||||
ML-HDNNP
|
ML-HDNNP
|
||||||
ML-PACE
|
ML-PACE
|
||||||
ML-QUIP
|
ML-QUIP
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# preset that will enable clang/clang++ with support for MPI and OpenMP (on Linux boxes)
|
# preset that will enable PGI (Nvidia) compilers with support for MPI and OpenMP (on Linux boxes)
|
||||||
|
|
||||||
set(CMAKE_CXX_COMPILER "pgc++" CACHE STRING "" FORCE)
|
set(CMAKE_CXX_COMPILER "pgc++" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_C_COMPILER "pgcc" CACHE STRING "" FORCE)
|
set(CMAKE_C_COMPILER "pgcc" CACHE STRING "" FORCE)
|
||||||
|
|||||||
8
cmake/presets/windows-intel-classic.cmake
Normal file
8
cmake/presets/windows-intel-classic.cmake
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# preset that will enable Intel compilers with support for MPI and OpenMP (on Linux boxes)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_COMPILER "icl" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_COMPILER "icl" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_Fortran_COMPILER "ifort" CACHE STRING "" FORCE)
|
||||||
|
|
||||||
|
unset(HAVE_OMP_H_INCLUDE CACHE)
|
||||||
|
|
||||||
8
cmake/presets/windows-intel-llvm.cmake
Normal file
8
cmake/presets/windows-intel-llvm.cmake
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# preset that will enable Intel compilers with support for MPI and OpenMP (on Linux boxes)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_COMPILER "icx" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_COMPILER "icx" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_Fortran_COMPILER "ifx" CACHE STRING "" FORCE)
|
||||||
|
set(INTEL_LRT_MODE "C++11" CACHE STRING "" FORCE)
|
||||||
|
unset(HAVE_OMP_H_INCLUDE CACHE)
|
||||||
|
set(CMAKE_TUNE_FLAGS -Wno-unused-command-line-argument)
|
||||||
@ -1,10 +1,12 @@
|
|||||||
set(WIN_PACKAGES
|
set(WIN_PACKAGES
|
||||||
|
AMOEBA
|
||||||
ASPHERE
|
ASPHERE
|
||||||
BOCS
|
BOCS
|
||||||
BODY
|
BODY
|
||||||
|
BPM
|
||||||
BROWNIAN
|
BROWNIAN
|
||||||
CG-DNA
|
CG-DNA
|
||||||
CG-SDK
|
CG-SPICA
|
||||||
CLASS2
|
CLASS2
|
||||||
COLLOID
|
COLLOID
|
||||||
COLVARS
|
COLVARS
|
||||||
@ -42,6 +44,7 @@ set(WIN_PACKAGES
|
|||||||
PERI
|
PERI
|
||||||
PHONON
|
PHONON
|
||||||
POEMS
|
POEMS
|
||||||
|
PLUGIN
|
||||||
PTM
|
PTM
|
||||||
QEQ
|
QEQ
|
||||||
QTB
|
QTB
|
||||||
|
|||||||
2
doc/.gitignore
vendored
2
doc/.gitignore
vendored
@ -1,6 +1,6 @@
|
|||||||
/old
|
/old
|
||||||
/html
|
/html
|
||||||
/html-offline
|
/fasthtml
|
||||||
/epub
|
/epub
|
||||||
/latex
|
/latex
|
||||||
/mathjax
|
/mathjax
|
||||||
|
|||||||
58
doc/Makefile
58
doc/Makefile
@ -13,35 +13,24 @@ VENV = $(BUILDDIR)/docenv
|
|||||||
ANCHORCHECK = $(VENV)/bin/rst_anchor_check
|
ANCHORCHECK = $(VENV)/bin/rst_anchor_check
|
||||||
SPHINXCONFIG = $(BUILDDIR)/utils/sphinx-config
|
SPHINXCONFIG = $(BUILDDIR)/utils/sphinx-config
|
||||||
MATHJAX = $(SPHINXCONFIG)/_static/mathjax
|
MATHJAX = $(SPHINXCONFIG)/_static/mathjax
|
||||||
|
MATHJAXTAG = 3.2.2
|
||||||
|
|
||||||
PYTHON = $(shell which python3)
|
PYTHON = $(word 3,$(shell type python3))
|
||||||
DOXYGEN = $(shell which doxygen)
|
DOXYGEN = $(word 3,$(shell type doxygen))
|
||||||
VIRTUALENV = virtualenv
|
|
||||||
HAS_PYTHON3 = NO
|
HAS_PYTHON3 = NO
|
||||||
HAS_VIRTUALENV = NO
|
|
||||||
HAS_DOXYGEN = NO
|
HAS_DOXYGEN = NO
|
||||||
HAS_PDFLATEX = NO
|
HAS_PDFLATEX = NO
|
||||||
|
|
||||||
ifeq ($(shell which python3 >/dev/null 2>&1; echo $$?), 0)
|
ifeq ($(shell type python3 >/dev/null 2>&1; echo $$?), 0)
|
||||||
HAS_PYTHON3 = YES
|
HAS_PYTHON3 = YES
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(shell which doxygen >/dev/null 2>&1; echo $$?), 0)
|
ifeq ($(shell type doxygen >/dev/null 2>&1; echo $$?), 0)
|
||||||
HAS_DOXYGEN = YES
|
HAS_DOXYGEN = YES
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(shell which virtualenv-3 >/dev/null 2>&1; echo $$?), 0)
|
ifeq ($(shell type pdflatex >/dev/null 2>&1; echo $$?), 0)
|
||||||
VIRTUALENV = virtualenv-3
|
ifeq ($(shell type latexmk >/dev/null 2>&1; echo $$?), 0)
|
||||||
HAS_VIRTUALENV = YES
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(shell which virtualenv >/dev/null 2>&1; echo $$?), 0)
|
|
||||||
VIRTUALENV = virtualenv
|
|
||||||
HAS_VIRTUALENV = YES
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(shell which pdflatex >/dev/null 2>&1; echo $$?), 0)
|
|
||||||
ifeq ($(shell which latexmk >/dev/null 2>&1; echo $$?), 0)
|
|
||||||
HAS_PDFLATEX = YES
|
HAS_PDFLATEX = YES
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
@ -58,7 +47,7 @@ SPHINXEXTRA = -E -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiproc
|
|||||||
# we only want to use explicitly listed files.
|
# we only want to use explicitly listed files.
|
||||||
DOXYFILES = $(shell sed -n -e 's/\#.*$$//' -e '/^ *INPUT \+=/,/^[A-Z_]\+ \+=/p' doxygen/Doxyfile.in | sed -e 's/@LAMMPS_SOURCE_DIR@/..\/src/g' -e 's/\\//g' -e 's/ \+/ /' -e 's/[A-Z_]\+ \+= *\(YES\|NO\|\)//')
|
DOXYFILES = $(shell sed -n -e 's/\#.*$$//' -e '/^ *INPUT \+=/,/^[A-Z_]\+ \+=/p' doxygen/Doxyfile.in | sed -e 's/@LAMMPS_SOURCE_DIR@/..\/src/g' -e 's/\\//g' -e 's/ \+/ /' -e 's/[A-Z_]\+ \+= *\(YES\|NO\|\)//')
|
||||||
|
|
||||||
.PHONY: help clean-all clean clean-spelling epub mobi rst html pdf spelling anchor_check style_check char_check xmlgen
|
.PHONY: help clean-all clean clean-spelling epub mobi rst html pdf spelling anchor_check style_check char_check xmlgen fasthtml
|
||||||
|
|
||||||
# ------------------------------------------
|
# ------------------------------------------
|
||||||
|
|
||||||
@ -70,7 +59,8 @@ help:
|
|||||||
@echo " epub create ePUB format manual for e-book readers"
|
@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 " mobi convert ePUB to MOBI format manual for e-book readers (e.g. Kindle)"
|
||||||
@echo " (requires ebook-convert tool from calibre)"
|
@echo " (requires ebook-convert tool from calibre)"
|
||||||
@echo " clean remove all intermediate RST files"
|
@echo " fasthtml approximate HTML page creation in fasthtml dir (for development)"
|
||||||
|
@echo " clean remove all intermediate files"
|
||||||
@echo " clean-all reset the entire build environment"
|
@echo " clean-all reset the entire build environment"
|
||||||
@echo " anchor_check scan for duplicate anchor labels"
|
@echo " anchor_check scan for duplicate anchor labels"
|
||||||
@echo " style_check check for complete and consistent style lists"
|
@echo " style_check check for complete and consistent style lists"
|
||||||
@ -83,7 +73,7 @@ clean-all: clean
|
|||||||
rm -rf $(BUILDDIR)/docenv $(MATHJAX) $(BUILDDIR)/LAMMPS.mobi $(BUILDDIR)/LAMMPS.epub $(BUILDDIR)/Manual.pdf
|
rm -rf $(BUILDDIR)/docenv $(MATHJAX) $(BUILDDIR)/LAMMPS.mobi $(BUILDDIR)/LAMMPS.epub $(BUILDDIR)/Manual.pdf
|
||||||
|
|
||||||
clean: clean-spelling
|
clean: clean-spelling
|
||||||
rm -rf $(BUILDDIR)/html $(BUILDDIR)/epub $(BUILDDIR)/latex $(BUILDDIR)/doctrees $(BUILDDIR)/doxygen/xml $(BUILDDIR)/doxygen-warn.log $(BUILDDIR)/doxygen/Doxyfile $(SPHINXCONFIG)/conf.py
|
rm -rf $(BUILDDIR)/html $(BUILDDIR)/epub $(BUILDDIR)/latex $(BUILDDIR)/doctrees $(BUILDDIR)/doxygen/xml $(BUILDDIR)/doxygen-warn.log $(BUILDDIR)/doxygen/Doxyfile $(SPHINXCONFIG)/conf.py $(BUILDDIR)/fasthtml
|
||||||
|
|
||||||
clean-spelling:
|
clean-spelling:
|
||||||
rm -rf $(BUILDDIR)/spelling
|
rm -rf $(BUILDDIR)/spelling
|
||||||
@ -118,6 +108,23 @@ html: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJAX)
|
|||||||
@rm -rf html/PDF/.[sg]*
|
@rm -rf html/PDF/.[sg]*
|
||||||
@echo "Build finished. The HTML pages are in doc/html."
|
@echo "Build finished. The HTML pages are in doc/html."
|
||||||
|
|
||||||
|
fasthtml: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJAX)
|
||||||
|
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
|
||||||
|
@$(MAKE) $(MFLAGS) -C graphviz all
|
||||||
|
@mkdir -p fasthtml
|
||||||
|
@(\
|
||||||
|
. $(VENV)/bin/activate ; env PYTHONWARNINGS= \
|
||||||
|
sphinx-build -j 4 -b html -c $(SPHINXCONFIG) -d $(BUILDDIR)/fasthtml/doctrees $(RSTDIR) fasthtml ;\
|
||||||
|
deactivate ;\
|
||||||
|
)
|
||||||
|
@rm -rf fasthtml/_sources
|
||||||
|
@rm -rf fasthtml/PDF
|
||||||
|
@rm -rf fasthtml/USER
|
||||||
|
@rm -rf fasthtml/JPG
|
||||||
|
@cp -r src/PDF fasthtml/PDF
|
||||||
|
@rm -rf fasthtml/PDF/.[sg]*
|
||||||
|
@echo "Fast HTML build finished. The HTML pages are in doc/fasthtml."
|
||||||
|
|
||||||
spelling: xmlgen $(SPHINXCONFIG)/conf.py $(VENV) $(SPHINXCONFIG)/false_positives.txt
|
spelling: xmlgen $(SPHINXCONFIG)/conf.py $(VENV) $(SPHINXCONFIG)/false_positives.txt
|
||||||
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
|
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
|
||||||
@(\
|
@(\
|
||||||
@ -220,22 +227,21 @@ $(VENV):
|
|||||||
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
|
@if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi
|
||||||
@if [ "$(HAS_PYTHON3)" == "NO" ] ; then echo "python3 was not found! Please see README for further instructions" 1>&2; exit 1; fi
|
@if [ "$(HAS_PYTHON3)" == "NO" ] ; then echo "python3 was not found! Please see README for further instructions" 1>&2; exit 1; fi
|
||||||
@if [ "$(HAS_DOXYGEN)" == "NO" ] ; then echo "doxygen was not found! Please see README for further instructions" 1>&2; exit 1; fi
|
@if [ "$(HAS_DOXYGEN)" == "NO" ] ; then echo "doxygen was not found! Please see README for further instructions" 1>&2; exit 1; fi
|
||||||
@if [ "$(HAS_VIRTUALENV)" == "NO" ] ; then echo "virtualenv was not found! Please see README for further instructions" 1>&2; exit 1; fi
|
|
||||||
@( \
|
@( \
|
||||||
$(VIRTUALENV) -p $(PYTHON) $(VENV); \
|
$(PYTHON) -m venv $(VENV); \
|
||||||
. $(VENV)/bin/activate; \
|
. $(VENV)/bin/activate; \
|
||||||
pip $(PIP_OPTIONS) install --upgrade pip; \
|
pip $(PIP_OPTIONS) install --upgrade pip; \
|
||||||
|
pip $(PIP_OPTIONS) install --upgrade wheel; \
|
||||||
pip $(PIP_OPTIONS) install -r $(BUILDDIR)/utils/requirements.txt; \
|
pip $(PIP_OPTIONS) install -r $(BUILDDIR)/utils/requirements.txt; \
|
||||||
deactivate;\
|
deactivate;\
|
||||||
)
|
)
|
||||||
|
|
||||||
$(MATHJAX):
|
$(MATHJAX):
|
||||||
@git clone -b 3.2.0 -c advice.detachedHead=0 --depth 1 https://github.com/mathjax/MathJax.git $@
|
@git clone -b $(MATHJAXTAG) -c advice.detachedHead=0 --depth 1 https://github.com/mathjax/MathJax.git $@
|
||||||
|
|
||||||
$(ANCHORCHECK): $(VENV)
|
$(ANCHORCHECK): $(VENV)
|
||||||
@( \
|
@( \
|
||||||
. $(VENV)/bin/activate; \
|
. $(VENV)/bin/activate; \
|
||||||
(cd utils/converters;\
|
pip $(PIP_OPTIONS) install -e utils/converters;\
|
||||||
python setup.py develop);\
|
|
||||||
deactivate;\
|
deactivate;\
|
||||||
)
|
)
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
DOXYFILE_ENCODING = UTF-8
|
DOXYFILE_ENCODING = UTF-8
|
||||||
PROJECT_NAME = "LAMMPS Programmer's Guide"
|
PROJECT_NAME = "LAMMPS Programmer's Guide"
|
||||||
PROJECT_NUMBER = "24 August 2020"
|
PROJECT_NUMBER = "4 May 2022"
|
||||||
PROJECT_BRIEF = "Documentation of the LAMMPS library interface and Python wrapper"
|
PROJECT_BRIEF = "Documentation of the LAMMPS library interface and Python wrapper"
|
||||||
PROJECT_LOGO = lammps-logo.png
|
PROJECT_LOGO = lammps-logo.png
|
||||||
CREATE_SUBDIRS = NO
|
CREATE_SUBDIRS = NO
|
||||||
@ -437,6 +437,8 @@ INPUT = @LAMMPS_SOURCE_DIR@/utils.cpp \
|
|||||||
@LAMMPS_SOURCE_DIR@/math_eigen.h \
|
@LAMMPS_SOURCE_DIR@/math_eigen.h \
|
||||||
@LAMMPS_SOURCE_DIR@/platform.h \
|
@LAMMPS_SOURCE_DIR@/platform.h \
|
||||||
@LAMMPS_SOURCE_DIR@/platform.cpp \
|
@LAMMPS_SOURCE_DIR@/platform.cpp \
|
||||||
|
@LAMMPS_SOURCE_DIR@/math_special.h \
|
||||||
|
@LAMMPS_SOURCE_DIR@/math_special.cpp \
|
||||||
|
|
||||||
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
|
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
|
||||||
# directories that are symbolic links (a Unix file system feature) are excluded
|
# directories that are symbolic links (a Unix file system feature) are excluded
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
.TH LAMMPS "1" "17 February 2022" "2022-2-17"
|
.TH LAMMPS "1" "3 August 2022" "2022-8-3"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
.B LAMMPS
|
.B LAMMPS
|
||||||
\- Molecular Dynamics Simulator.
|
\- Molecular Dynamics Simulator. Version 3 August 2022
|
||||||
|
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B lmp
|
.B lmp
|
||||||
@ -161,7 +161,7 @@ list references for specific cite-able features used during a
|
|||||||
run.
|
run.
|
||||||
.TP
|
.TP
|
||||||
\fB\-pk <style> [options]\fR or \fB\-package <style> [options]\fR
|
\fB\-pk <style> [options]\fR or \fB\-package <style> [options]\fR
|
||||||
Invoke the \fBpackage\R command with <style> and optional arguments.
|
Invoke the \fBpackage\fR command with <style> and optional arguments.
|
||||||
The syntax is the same as if the command appeared in an input script.
|
The syntax is the same as if the command appeared in an input script.
|
||||||
For example "-pk gpu 2" is the same as "package gpu 2" in the input
|
For example "-pk gpu 2" is the same as "package gpu 2" in the input
|
||||||
script. The possible styles and options are discussed in the
|
script. The possible styles and options are discussed in the
|
||||||
@ -297,7 +297,7 @@ the chapter on errors in the
|
|||||||
manual gives some additional information about error messages, if possible.
|
manual gives some additional information about error messages, if possible.
|
||||||
|
|
||||||
.SH COPYRIGHT
|
.SH COPYRIGHT
|
||||||
© 2003--2021 Sandia Corporation
|
© 2003--2022 Sandia Corporation
|
||||||
|
|
||||||
This package is free software; you can redistribute it and/or modify
|
This package is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License version 2 as
|
it under the terms of the GNU General Public License version 2 as
|
||||||
|
|||||||
@ -98,7 +98,7 @@ msi2lmp decane -c 0 -f oplsaa
|
|||||||
|
|
||||||
|
|
||||||
.SH COPYRIGHT
|
.SH COPYRIGHT
|
||||||
© 2003--2021 Sandia Corporation
|
© 2003--2022 Sandia Corporation
|
||||||
|
|
||||||
This package is free software; you can redistribute it and/or modify
|
This package is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License version 2 as
|
it under the terms of the GNU General Public License version 2 as
|
||||||
|
|||||||
@ -486,14 +486,14 @@ The following options are available.
|
|||||||
make fix-whitespace # correct whitespace issues in files
|
make fix-whitespace # correct whitespace issues in files
|
||||||
make check-homepage # search for files with old LAMMPS homepage URLs
|
make check-homepage # search for files with old LAMMPS homepage URLs
|
||||||
make fix-homepage # correct LAMMPS homepage URLs in files
|
make fix-homepage # correct LAMMPS homepage URLs in files
|
||||||
|
make check-errordocs # search for deprecated error docs in header files
|
||||||
|
make fix-errordocs # remove error docs in header files
|
||||||
make check-permissions # search for files with permissions issues
|
make check-permissions # search for files with permissions issues
|
||||||
make fix-permissions # correct permissions issues in files
|
make fix-permissions # correct permissions issues in files
|
||||||
|
make check # run all check targets from above
|
||||||
|
|
||||||
These should help to replace all TAB characters with blanks and remove
|
These should help to make source and documentation files conforming
|
||||||
any trailing whitespace. Also all LAMMPS homepage URL references can be
|
to some the coding style preferences of the LAMMPS developers.
|
||||||
updated to the location change from Sandia to the lammps.org domain.
|
|
||||||
And the permission check can remove executable permissions from non-executable
|
|
||||||
files (like source code).
|
|
||||||
|
|
||||||
Clang-format support
|
Clang-format support
|
||||||
--------------------
|
--------------------
|
||||||
|
|||||||
@ -45,7 +45,6 @@ This is the list of packages that may require additional steps.
|
|||||||
* :ref:`MACHDYN <machdyn>`
|
* :ref:`MACHDYN <machdyn>`
|
||||||
* :ref:`MDI <mdi>`
|
* :ref:`MDI <mdi>`
|
||||||
* :ref:`MESONT <mesont>`
|
* :ref:`MESONT <mesont>`
|
||||||
* :ref:`MESSAGE <message>`
|
|
||||||
* :ref:`ML-HDNNP <ml-hdnnp>`
|
* :ref:`ML-HDNNP <ml-hdnnp>`
|
||||||
* :ref:`ML-IAP <mliap>`
|
* :ref:`ML-IAP <mliap>`
|
||||||
* :ref:`ML-PACE <ml-pace>`
|
* :ref:`ML-PACE <ml-pace>`
|
||||||
@ -124,6 +123,7 @@ CMake build
|
|||||||
-D GPU_API=value # value = opencl (default) or cuda or hip
|
-D GPU_API=value # value = opencl (default) or cuda or hip
|
||||||
-D GPU_PREC=value # precision setting
|
-D GPU_PREC=value # precision setting
|
||||||
# value = double or mixed (default) or single
|
# value = double or mixed (default) or single
|
||||||
|
-D HIP_PATH # path to HIP installation. Must be set if GPU_API=HIP
|
||||||
-D GPU_ARCH=value # primary GPU hardware choice for GPU_API=cuda
|
-D GPU_ARCH=value # primary GPU hardware choice for GPU_API=cuda
|
||||||
# value = sm_XX, see below
|
# value = sm_XX, see below
|
||||||
# default is sm_50
|
# default is sm_50
|
||||||
@ -142,8 +142,6 @@ CMake build
|
|||||||
|
|
||||||
:code:`GPU_ARCH` settings for different GPU hardware is as follows:
|
:code:`GPU_ARCH` settings for different GPU hardware is as follows:
|
||||||
|
|
||||||
* sm_12 or sm_13 for GT200 (supported by CUDA 3.2 until CUDA 6.5)
|
|
||||||
* sm_20 or sm_21 for Fermi (supported by CUDA 3.2 until CUDA 7.5)
|
|
||||||
* sm_30 for Kepler (supported since CUDA 5 and until CUDA 10.x)
|
* sm_30 for Kepler (supported since CUDA 5 and until CUDA 10.x)
|
||||||
* sm_35 or sm_37 for Kepler (supported since CUDA 5 and until CUDA 11.x)
|
* sm_35 or sm_37 for Kepler (supported since CUDA 5 and until CUDA 11.x)
|
||||||
* sm_50 or sm_52 for Maxwell (supported since CUDA 6)
|
* sm_50 or sm_52 for Maxwell (supported since CUDA 6)
|
||||||
@ -161,6 +159,12 @@ Thus the GPU_ARCH setting is merely an optimization, to have code for
|
|||||||
the preferred GPU architecture directly included rather than having to wait
|
the preferred GPU architecture directly included rather than having to wait
|
||||||
for the JIT compiler of the CUDA driver to translate it.
|
for the JIT compiler of the CUDA driver to translate it.
|
||||||
|
|
||||||
|
When compiling for CUDA or HIP with CUDA, version 8.0 or later of the CUDA toolkit
|
||||||
|
is required and a GPU architecture of Kepler or later, which must *also* be
|
||||||
|
supported by the CUDA toolkit in use **and** the CUDA driver in use.
|
||||||
|
When compiling for OpenCL, OpenCL version 1.2 or later is required and the
|
||||||
|
GPU must be supported by the GPU driver and OpenCL runtime bundled with the driver.
|
||||||
|
|
||||||
When building with CMake, you **must NOT** build the GPU library in ``lib/gpu``
|
When building with CMake, you **must NOT** build the GPU library in ``lib/gpu``
|
||||||
using the traditional build procedure. CMake will detect files generated by that
|
using the traditional build procedure. CMake will detect files generated by that
|
||||||
process and will terminate with an error and a suggestion for how to remove them.
|
process and will terminate with an error and a suggestion for how to remove them.
|
||||||
@ -176,10 +180,17 @@ set appropriate environment variables. Some variables such as
|
|||||||
:code:`HCC_AMDGPU_TARGET` (for ROCm <= 4.0) or :code:`CUDA_PATH` are necessary for :code:`hipcc`
|
:code:`HCC_AMDGPU_TARGET` (for ROCm <= 4.0) or :code:`CUDA_PATH` are necessary for :code:`hipcc`
|
||||||
and the linker to work correctly.
|
and the linker to work correctly.
|
||||||
|
|
||||||
|
Using CHIP-SPV implementation of HIP is now supported. It allows one to run HIP
|
||||||
|
code on Intel GPUs via the OpenCL or Level Zero backends. To use CHIP-SPV, you must
|
||||||
|
set :code:`-DHIP_USE_DEVICE_SORT=OFF` in your CMake command line as CHIP-SPV does not
|
||||||
|
yet support hipCUB. The use of HIP for Intel GPUs is still experimental so you
|
||||||
|
should only use this option in preparations to run on Aurora system at ANL.
|
||||||
|
|
||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
# AMDGPU target (ROCm <= 4.0)
|
# AMDGPU target (ROCm <= 4.0)
|
||||||
export HIP_PLATFORM=hcc
|
export HIP_PLATFORM=hcc
|
||||||
|
export HIP_PATH=/path/to/HIP/install
|
||||||
export HCC_AMDGPU_TARGET=gfx906
|
export HCC_AMDGPU_TARGET=gfx906
|
||||||
cmake -D PKG_GPU=on -D GPU_API=HIP -D HIP_ARCH=gfx906 -D CMAKE_CXX_COMPILER=hipcc ..
|
cmake -D PKG_GPU=on -D GPU_API=HIP -D HIP_ARCH=gfx906 -D CMAKE_CXX_COMPILER=hipcc ..
|
||||||
make -j 4
|
make -j 4
|
||||||
@ -188,6 +199,7 @@ and the linker to work correctly.
|
|||||||
|
|
||||||
# AMDGPU target (ROCm >= 4.1)
|
# AMDGPU target (ROCm >= 4.1)
|
||||||
export HIP_PLATFORM=amd
|
export HIP_PLATFORM=amd
|
||||||
|
export HIP_PATH=/path/to/HIP/install
|
||||||
cmake -D PKG_GPU=on -D GPU_API=HIP -D HIP_ARCH=gfx906 -D CMAKE_CXX_COMPILER=hipcc ..
|
cmake -D PKG_GPU=on -D GPU_API=HIP -D HIP_ARCH=gfx906 -D CMAKE_CXX_COMPILER=hipcc ..
|
||||||
make -j 4
|
make -j 4
|
||||||
|
|
||||||
@ -196,10 +208,20 @@ and the linker to work correctly.
|
|||||||
# CUDA target (not recommended, use GPU_ARCH=cuda)
|
# CUDA target (not recommended, use GPU_ARCH=cuda)
|
||||||
# !!! DO NOT set CMAKE_CXX_COMPILER !!!
|
# !!! DO NOT set CMAKE_CXX_COMPILER !!!
|
||||||
export HIP_PLATFORM=nvcc
|
export HIP_PLATFORM=nvcc
|
||||||
|
export HIP_PATH=/path/to/HIP/install
|
||||||
export CUDA_PATH=/usr/local/cuda
|
export CUDA_PATH=/usr/local/cuda
|
||||||
cmake -D PKG_GPU=on -D GPU_API=HIP -D HIP_ARCH=sm_70 ..
|
cmake -D PKG_GPU=on -D GPU_API=HIP -D HIP_ARCH=sm_70 ..
|
||||||
make -j 4
|
make -j 4
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
# SPIR-V target (Intel GPUs)
|
||||||
|
export HIP_PLATFORM=spirv
|
||||||
|
export HIP_PATH=/path/to/HIP/install
|
||||||
|
export CMAKE_CXX_COMPILER=<hipcc/clang++>
|
||||||
|
cmake -D PKG_GPU=on -D GPU_API=HIP ..
|
||||||
|
make -j 4
|
||||||
|
|
||||||
Traditional make
|
Traditional make
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@ -638,13 +660,27 @@ This list was last updated for version 3.5.0 of the Kokkos library.
|
|||||||
|
|
||||||
-D CMAKE_CXX_COMPILER=${HOME}/lammps/lib/kokkos/bin/nvcc_wrapper
|
-D CMAKE_CXX_COMPILER=${HOME}/lammps/lib/kokkos/bin/nvcc_wrapper
|
||||||
|
|
||||||
To simplify compilation, three preset files are included in the
|
For AMD or NVIDIA GPUs using HIP, set these variables:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
-D Kokkos_ARCH_HOSTARCH=yes # HOSTARCH = HOST from list above
|
||||||
|
-D Kokkos_ARCH_GPUARCH=yes # GPUARCH = GPU from list above
|
||||||
|
-D Kokkos_ENABLE_HIP=yes
|
||||||
|
-D Kokkos_ENABLE_OPENMP=yes
|
||||||
|
|
||||||
|
This will enable FFTs on the GPU, either by the internal KISSFFT library
|
||||||
|
or with the hipFFT wrapper library, which will call out to the
|
||||||
|
platform-appropriate vendor library: rocFFT on AMD GPUs or cuFFT on
|
||||||
|
NVIDIA GPUs.
|
||||||
|
|
||||||
|
To simplify compilation, five preset files are included in the
|
||||||
``cmake/presets`` folder, ``kokkos-serial.cmake``,
|
``cmake/presets`` folder, ``kokkos-serial.cmake``,
|
||||||
``kokkos-openmp.cmake``, and ``kokkos-cuda.cmake``. They will
|
``kokkos-openmp.cmake``, ``kokkos-cuda.cmake``,
|
||||||
enable the KOKKOS package and enable some hardware choice. So to
|
``kokkos-hip.cmake``, and ``kokkos-sycl.cmake``. They will enable
|
||||||
compile with OpenMP host parallelization, CUDA device
|
the KOKKOS package and enable some hardware choice. So to compile
|
||||||
parallelization (for GPUs with CC 5.0 and up) with some common
|
with CUDA device parallelization (for GPUs with CC 5.0 and up)
|
||||||
packages enabled, you can do the following:
|
with some common packages enabled, you can do the following:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
@ -703,6 +739,15 @@ This list was last updated for version 3.5.0 of the Kokkos library.
|
|||||||
KOKKOS_ABSOLUTE_PATH = $(shell cd $(KOKKOS_PATH); pwd)
|
KOKKOS_ABSOLUTE_PATH = $(shell cd $(KOKKOS_PATH); pwd)
|
||||||
CC = mpicxx -cxx=$(KOKKOS_ABSOLUTE_PATH)/config/nvcc_wrapper
|
CC = mpicxx -cxx=$(KOKKOS_ABSOLUTE_PATH)/config/nvcc_wrapper
|
||||||
|
|
||||||
|
For AMD or NVIDIA GPUs using HIP:
|
||||||
|
|
||||||
|
.. code-block:: make
|
||||||
|
|
||||||
|
KOKKOS_DEVICES = HIP
|
||||||
|
KOKKOS_ARCH = HOSTARCH,GPUARCH # HOSTARCH = HOST from list above that is hosting the GPU
|
||||||
|
# GPUARCH = GPU from list above
|
||||||
|
FFT_INC = -DFFT_HIPFFT # enable use of hipFFT (optional)
|
||||||
|
FFT_LIB = -lhipfft # link to hipFFT library
|
||||||
|
|
||||||
Advanced KOKKOS compilation settings
|
Advanced KOKKOS compilation settings
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
@ -764,6 +809,8 @@ library.
|
|||||||
|
|
||||||
-D DOWNLOAD_LATTE=value # download LATTE for build, value = no (default) or yes
|
-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)
|
-D LATTE_LIBRARY=path # LATTE library file (only needed if a custom location)
|
||||||
|
-D USE_INTERNAL_LINALG=value # Use the internal linear algebra library instead of LAPACK
|
||||||
|
# value = no (default) or yes
|
||||||
|
|
||||||
If ``DOWNLOAD_LATTE`` is set, the LATTE library will be downloaded
|
If ``DOWNLOAD_LATTE`` is set, the LATTE library will be downloaded
|
||||||
and built inside the CMake build directory. If the LATTE library
|
and built inside the CMake build directory. If the LATTE library
|
||||||
@ -771,6 +818,13 @@ library.
|
|||||||
``LATTE_LIBRARY`` is the filename (plus path) of the LATTE library
|
``LATTE_LIBRARY`` is the filename (plus path) of the LATTE library
|
||||||
file, not the directory the library file is in.
|
file, not the directory the library file is in.
|
||||||
|
|
||||||
|
The LATTE library requires LAPACK (and BLAS) and CMake can identify
|
||||||
|
their locations and pass that info to the LATTE build script. But
|
||||||
|
on some systems this triggers a (current) limitation of CMake and
|
||||||
|
the configuration will fail. Try enabling ``USE_INTERNAL_LINALG`` in
|
||||||
|
those cases to use the bundled linear algebra library and work around
|
||||||
|
the limitation.
|
||||||
|
|
||||||
.. tab:: Traditional make
|
.. tab:: Traditional make
|
||||||
|
|
||||||
You can download and build the LATTE library manually if you
|
You can download and build the LATTE library manually if you
|
||||||
@ -796,47 +850,6 @@ library.
|
|||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
.. _message:
|
|
||||||
|
|
||||||
MESSAGE package
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
This package can optionally include support for messaging via sockets,
|
|
||||||
using the open-source `ZeroMQ library <http://zeromq.org>`_, which must
|
|
||||||
be installed on your system.
|
|
||||||
|
|
||||||
.. tabs::
|
|
||||||
|
|
||||||
.. tab:: CMake build
|
|
||||||
|
|
||||||
.. 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)
|
|
||||||
-D ZMQ_INCLUDE_DIR=path # ZMQ include directory (only needed if a custom location)
|
|
||||||
|
|
||||||
.. tab:: Traditional make
|
|
||||||
|
|
||||||
Before building LAMMPS, you must build the CSlib library in
|
|
||||||
``lib/message``\ . You can build the CSlib library manually if
|
|
||||||
you prefer; follow the instructions in ``lib/message/README``\ .
|
|
||||||
You can also do it in 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:
|
|
||||||
|
|
||||||
.. 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
|
|
||||||
|
|
||||||
The build should produce two files: ``lib/message/cslib/src/libmessage.a``
|
|
||||||
and ``lib/message/Makefile.lammps``. The latter is copied from an
|
|
||||||
existing ``Makefile.lammps.*`` and has settings to link with the ZeroMQ
|
|
||||||
library if requested in the build.
|
|
||||||
|
|
||||||
----------
|
|
||||||
|
|
||||||
.. _mliap:
|
.. _mliap:
|
||||||
|
|
||||||
ML-IAP package
|
ML-IAP package
|
||||||
@ -1289,6 +1302,41 @@ be built for the most part with all major versions of the C++ language.
|
|||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
.. _electrode:
|
||||||
|
|
||||||
|
ELECTRODE package
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
This package depends on the KSPACE package.
|
||||||
|
|
||||||
|
.. tabs::
|
||||||
|
|
||||||
|
.. tab:: CMake build
|
||||||
|
|
||||||
|
No additional settings are needed besides ``-D PKG_KSPACE=yes`` and ``-D
|
||||||
|
PKG_ELECTRODE=yes``.
|
||||||
|
|
||||||
|
.. tab:: Traditional make
|
||||||
|
|
||||||
|
The package is activated with ``make yes-KSPACE`` and ``make
|
||||||
|
yes-ELECTRODE``
|
||||||
|
|
||||||
|
|
||||||
|
Note that the ``Makefile.lammps`` file has settings for the BLAS and
|
||||||
|
LAPACK linear algebra libraries. As explained in ``lib/awpmd/README``
|
||||||
|
these can either exist on your system, or you can use the files provided
|
||||||
|
in ``lib/linalg``. In the latter case you also need to build the library
|
||||||
|
in ``lib/linalg`` with a command like these:
|
||||||
|
|
||||||
|
.. 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
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
.. _ml-pace:
|
.. _ml-pace:
|
||||||
|
|
||||||
ML-PACE package
|
ML-PACE package
|
||||||
@ -1893,14 +1941,25 @@ within CMake will download the non-commercial use version.
|
|||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
-D DOWNLOAD_QUIP=value # download OpenKIM API v2 for build, value = no (default) or yes
|
-D DOWNLOAD_QUIP=value # download QUIP library for build, value = no (default) or yes
|
||||||
-D QUIP_LIBRARY=path # path to libquip.a (only needed if a custom location)
|
-D QUIP_LIBRARY=path # path to libquip.a (only needed if a custom location)
|
||||||
|
-D USE_INTERNAL_LINALG=value # Use the internal linear algebra library instead of LAPACK
|
||||||
|
# value = no (default) or yes
|
||||||
|
|
||||||
CMake will try to download and build the QUIP library from GitHub, if it is not
|
CMake will try to download and build the QUIP library from GitHub,
|
||||||
found on the local machine. This requires to have git installed. It will use the same compilers
|
if it is not found on the local machine. This requires to have git
|
||||||
and flags as used for compiling LAMMPS. Currently this is only supported for the GNU and the
|
installed. It will use the same compilers and flags as used for
|
||||||
Intel compilers. Set the ``QUIP_LIBRARY`` variable if you want to use a previously compiled
|
compiling LAMMPS. Currently this is only supported for the GNU
|
||||||
and installed QUIP library and CMake cannot find it.
|
and the Intel compilers. Set the ``QUIP_LIBRARY`` variable if you
|
||||||
|
want to use a previously compiled and installed QUIP library and
|
||||||
|
CMake cannot find it.
|
||||||
|
|
||||||
|
The QUIP library requires LAPACK (and BLAS) and CMake can identify
|
||||||
|
their locations and pass that info to the QUIP build script. But
|
||||||
|
on some systems this triggers a (current) limitation of CMake and
|
||||||
|
the configuration will fail. Try enabling ``USE_INTERNAL_LINALG`` in
|
||||||
|
those cases to use the bundled linear algebra library and work around
|
||||||
|
the limitation.
|
||||||
|
|
||||||
.. tab:: Traditional make
|
.. tab:: Traditional make
|
||||||
|
|
||||||
|
|||||||
@ -48,18 +48,15 @@ Build using GNU make
|
|||||||
|
|
||||||
The LAMMPS manual is written in `reStructuredText <rst_>`_ format which
|
The LAMMPS manual is written in `reStructuredText <rst_>`_ format which
|
||||||
can be translated to different output format using the `Sphinx
|
can be translated to different output format using the `Sphinx
|
||||||
<sphinx_>`_ document generator tool. It also incorporates programmer
|
<https://sphinx-doc.org>`_ document generator tool. It also
|
||||||
documentation extracted from the LAMMPS C++ sources through the `Doxygen
|
incorporates programmer documentation extracted from the LAMMPS C++
|
||||||
<https://doxygen.nl>`_ program. Currently the translation to HTML, PDF
|
sources through the `Doxygen <https://doxygen.nl>`_ program. Currently
|
||||||
(via LaTeX), ePUB (for many e-book readers) and MOBI (for Amazon Kindle
|
the translation to HTML, PDF (via LaTeX), ePUB (for many e-book readers)
|
||||||
readers) are supported. For that to work a Python 3 interpreter, the
|
and MOBI (for Amazon Kindle readers) are supported. For that to work a
|
||||||
``doxygen`` tools and internet access to download additional files and
|
Python 3 interpreter, the ``doxygen`` tools and internet access to
|
||||||
tools are required. This download is usually only required once or
|
download additional files and tools are required. This download is
|
||||||
after the documentation folder is returned to a pristine state with
|
usually only required once or after the documentation folder is returned
|
||||||
``make clean-all``.
|
to a pristine state with ``make clean-all``.
|
||||||
|
|
||||||
.. _rst: https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html
|
|
||||||
.. _sphinx: https://www.sphinx-doc.org
|
|
||||||
|
|
||||||
For the documentation build a python virtual environment is set up in
|
For the documentation build a python virtual environment is set up in
|
||||||
the folder ``doc/docenv`` and various python packages are installed into
|
the folder ``doc/docenv`` and various python packages are installed into
|
||||||
@ -78,11 +75,12 @@ folder. The following ``make`` commands are available:
|
|||||||
|
|
||||||
make html # generate HTML in html dir using Sphinx
|
make html # generate HTML in html dir using Sphinx
|
||||||
make pdf # generate PDF as Manual.pdf using Sphinx and PDFLaTeX
|
make pdf # generate PDF as Manual.pdf using Sphinx and PDFLaTeX
|
||||||
make fetch # fetch HTML pages and PDF files from LAMMPS website
|
|
||||||
# and unpack into the html_www folder and Manual_www.pdf
|
|
||||||
make epub # generate LAMMPS.epub in ePUB format using Sphinx
|
make epub # generate LAMMPS.epub in ePUB format using Sphinx
|
||||||
make mobi # generate LAMMPS.mobi in MOBI format using ebook-convert
|
make mobi # generate LAMMPS.mobi in MOBI format using ebook-convert
|
||||||
|
|
||||||
|
make fasthtml # generate approximate HTML in fasthtml dir using Sphinx
|
||||||
|
# some Sphinx extensions do not work correctly with this
|
||||||
|
|
||||||
make clean # remove intermediate RST files created by HTML build
|
make clean # remove intermediate RST files created by HTML build
|
||||||
make clean-all # remove entire build folder and any cached data
|
make clean-all # remove entire build folder and any cached data
|
||||||
|
|
||||||
@ -193,8 +191,13 @@ folder need to be updated or new files added. These files are written in
|
|||||||
`reStructuredText <rst_>`_ markup for translation with the Sphinx tool.
|
`reStructuredText <rst_>`_ markup for translation with the Sphinx tool.
|
||||||
|
|
||||||
Before contributing any documentation, please check that both the HTML
|
Before contributing any documentation, please check that both the HTML
|
||||||
and the PDF format documentation can translate without errors. Please also
|
and the PDF format documentation can translate without errors. During
|
||||||
check the output to the console for any warnings or problems. There will
|
testing the html translation, you may use the ``make fasthtml`` command
|
||||||
|
which does an approximate translation (i.e. not all Sphinx features and
|
||||||
|
extensions will work), but runs very fast because it will only translate
|
||||||
|
files that have been changed since the last ``make fasthtml`` command.
|
||||||
|
|
||||||
|
Please also check the output to the console for any warnings or problems. There will
|
||||||
be multiple tests run automatically:
|
be multiple tests run automatically:
|
||||||
|
|
||||||
- A test for correctness of all anchor labels and their references
|
- A test for correctness of all anchor labels and their references
|
||||||
@ -246,6 +249,5 @@ manual with ``make spelling``. This requires `a library called enchant
|
|||||||
positives* (e.g. keywords, names, abbreviations) those can be added to
|
positives* (e.g. keywords, names, abbreviations) those can be added to
|
||||||
the file ``lammps/doc/utils/sphinx-config/false_positives.txt``.
|
the file ``lammps/doc/utils/sphinx-config/false_positives.txt``.
|
||||||
|
|
||||||
.. _rst: https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html
|
|
||||||
|
|
||||||
.. _lws: https://www.lammps.org
|
.. _lws: https://www.lammps.org
|
||||||
|
.. _rst: https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html
|
||||||
|
|||||||
@ -45,7 +45,6 @@ packages:
|
|||||||
* :ref:`KOKKOS <kokkos>`
|
* :ref:`KOKKOS <kokkos>`
|
||||||
* :ref:`LATTE <latte>`
|
* :ref:`LATTE <latte>`
|
||||||
* :ref:`MACHDYN <machdyn>`
|
* :ref:`MACHDYN <machdyn>`
|
||||||
* :ref:`MESSAGE <message>`
|
|
||||||
* :ref:`ML-HDNNP <ml-hdnnp>`
|
* :ref:`ML-HDNNP <ml-hdnnp>`
|
||||||
* :ref:`ML-PACE <ml-pace>`
|
* :ref:`ML-PACE <ml-pace>`
|
||||||
* :ref:`ML-QUIP <ml-quip>`
|
* :ref:`ML-QUIP <ml-quip>`
|
||||||
@ -151,7 +150,7 @@ other files dependent on that package are also excluded.
|
|||||||
.. _cmake_presets:
|
.. _cmake_presets:
|
||||||
|
|
||||||
CMake presets for installing many packages
|
CMake presets for installing many packages
|
||||||
""""""""""""""""""""""""""""""""""""""""""
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Instead of specifying all the CMake options via the command-line,
|
Instead of specifying all the CMake options via the command-line,
|
||||||
CMake allows initializing its settings cache using script files.
|
CMake allows initializing its settings cache using script files.
|
||||||
@ -179,6 +178,11 @@ one of them as a starting point and customize it to your needs.
|
|||||||
cmake -C ../cmake/presets/all_off.cmake [OPTIONS] ../cmake # disable all packages
|
cmake -C ../cmake/presets/all_off.cmake [OPTIONS] ../cmake # disable all packages
|
||||||
mingw64-cmake -C ../cmake/presets/mingw-cross.cmake [OPTIONS] ../cmake # compile with MinGW cross compilers
|
mingw64-cmake -C ../cmake/presets/mingw-cross.cmake [OPTIONS] ../cmake # compile with MinGW cross compilers
|
||||||
|
|
||||||
|
Presets that have names starting with "windows" are specifically for
|
||||||
|
compiling LAMMPS :doc:`natively on Windows <Build_windows>` and
|
||||||
|
presets that have names starting with "kokkos" are specifically for
|
||||||
|
selecting configurations for compiling LAMMPS with :ref:`KOKKOS <kokkos>`.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Running cmake this way manipulates the CMake settings cache in your
|
Running cmake this way manipulates the CMake settings cache in your
|
||||||
@ -221,7 +225,8 @@ These commands install/un-install sets of packages:
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
make yes-all # install all packages
|
make yes-all # install all packages
|
||||||
make no-all # uninstall all packages
|
make no-all # check for changes and uninstall all packages
|
||||||
|
make no-installed # only check and uninstall installed packages
|
||||||
make yes-basic # install a few commonly used packages'
|
make yes-basic # install a few commonly used packages'
|
||||||
make no-basic # remove a few commonly used packages'
|
make no-basic # remove a few commonly used packages'
|
||||||
make yes-most # install most packages w/o libs'
|
make yes-most # install most packages w/o libs'
|
||||||
|
|||||||
@ -287,8 +287,8 @@ Output of JPG, PNG, and movie files
|
|||||||
|
|
||||||
The :doc:`dump image <dump_image>` command has options to output JPEG or
|
The :doc:`dump image <dump_image>` command has options to output JPEG or
|
||||||
PNG image files. Likewise the :doc:`dump movie <dump_image>` command
|
PNG image files. Likewise the :doc:`dump movie <dump_image>` command
|
||||||
outputs movie files in MPEG format. Using these options requires the
|
outputs movie files in a variety of movie formats. Using these options
|
||||||
following settings:
|
requires the following settings:
|
||||||
|
|
||||||
.. tabs::
|
.. tabs::
|
||||||
|
|
||||||
@ -328,11 +328,12 @@ following settings:
|
|||||||
JPG_LIB = -ljpeg -lpng -lz # library names
|
JPG_LIB = -ljpeg -lpng -lz # library names
|
||||||
|
|
||||||
As with CMake, you do not need to set ``JPG_INC`` or ``JPG_PATH``,
|
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
|
if make can find the graphics header and library files in their
|
||||||
specify ``JPG_LIB`` with a list of graphics libraries to include
|
default system locations. You must specify ``JPG_LIB`` with a
|
||||||
in the link. You must insure ffmpeg is in a directory where
|
list of graphics libraries to include in the link. You must make
|
||||||
LAMMPS can find it at runtime, that is a directory in your PATH
|
certain that the ffmpeg executable (or ffmpeg.exe on Windows) is
|
||||||
environment variable.
|
in a directory where LAMMPS can find it at runtime; that is
|
||||||
|
usually a directory list in your ``PATH`` environment variable.
|
||||||
|
|
||||||
Using ``ffmpeg`` to output movie files requires that your machine
|
Using ``ffmpeg`` to output movie files requires that your machine
|
||||||
supports the "popen" function in the standard runtime library.
|
supports the "popen" function in the standard runtime library.
|
||||||
|
|||||||
@ -5,6 +5,7 @@ Notes for building LAMMPS on Windows
|
|||||||
* :ref:`Running Linux on Windows <linux>`
|
* :ref:`Running Linux on Windows <linux>`
|
||||||
* :ref:`Using GNU GCC ported to Windows <gnu>`
|
* :ref:`Using GNU GCC ported to Windows <gnu>`
|
||||||
* :ref:`Using Visual Studio <msvc>`
|
* :ref:`Using Visual Studio <msvc>`
|
||||||
|
* :ref:`Using Intel oneAPI compilers and libraries <oneapi>`
|
||||||
* :ref:`Using a cross-compiler <cross>`
|
* :ref:`Using a cross-compiler <cross>`
|
||||||
|
|
||||||
----------
|
----------
|
||||||
@ -25,8 +26,10 @@ assistance in resolving portability issues. This is particularly true
|
|||||||
for compiling LAMMPS on Windows, since this platform has significant
|
for compiling LAMMPS on Windows, since this platform has significant
|
||||||
differences in some low-level functionality. As of LAMMPS version 14
|
differences in some low-level functionality. As of LAMMPS version 14
|
||||||
December 2021, large parts of LAMMPS can be compiled natively with the
|
December 2021, large parts of LAMMPS can be compiled natively with the
|
||||||
Microsoft Visual C++ Compilers. This is largely facilitated by using
|
Microsoft Visual C++ Compilers. As of LAMMPS version 31 May 2022, also
|
||||||
the :doc:`Developer_platform` in the ``platform`` namespace.
|
the Intel oneAPI compilers can compile large parts of LAMMPS natively on
|
||||||
|
Windows. This is mostly facilitated by using the
|
||||||
|
:doc:`Developer_platform` in the ``platform`` namespace and CMake.
|
||||||
|
|
||||||
Before trying to build LAMMPS on Windows yourself, please consider the
|
Before trying to build LAMMPS on Windows yourself, please consider the
|
||||||
`pre-compiled Windows installer packages <https://packages.lammps.org/windows.html>`_
|
`pre-compiled Windows installer packages <https://packages.lammps.org/windows.html>`_
|
||||||
@ -73,8 +76,9 @@ configuration should set this up automatically, but is untested.
|
|||||||
In case of problems, you are recommended to contact somebody with
|
In case of problems, you are recommended to contact somebody with
|
||||||
experience in using Cygwin. If you do come across portability problems
|
experience in using Cygwin. If you do come across portability problems
|
||||||
requiring changes to the LAMMPS source code, or figure out corrections
|
requiring changes to the LAMMPS source code, or figure out corrections
|
||||||
yourself, please report them on the lammps-users mailing list, or file
|
yourself, please report them on the
|
||||||
them as an issue or pull request on the LAMMPS GitHub project.
|
`LAMMPS forum at MatSci <https://matsci.org/c/lammps/lammps-development/>`_,
|
||||||
|
or file them as an issue or pull request on the LAMMPS GitHub project.
|
||||||
|
|
||||||
.. _msvc:
|
.. _msvc:
|
||||||
|
|
||||||
@ -98,6 +102,10 @@ It is possible to use both the integrated CMake support of the Visual
|
|||||||
Studio IDE or use an external CMake installation (e.g. downloaded from
|
Studio IDE or use an external CMake installation (e.g. downloaded from
|
||||||
cmake.org) to create build files and compile LAMMPS from the command line.
|
cmake.org) to create build files and compile LAMMPS from the command line.
|
||||||
|
|
||||||
|
Compilation via command line and unit tests are checked automatically
|
||||||
|
for the LAMMPS development branch through
|
||||||
|
`GitHub Actions <https://github.com/lammps/lammps/actions/workflows/compile-msvc.yml>`_.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Versions of Visual Studio before version 17.1 may scan the entire
|
Versions of Visual Studio before version 17.1 may scan the entire
|
||||||
@ -110,6 +118,10 @@ Please note, that for either approach CMake will create a so-called
|
|||||||
the command lines for building and testing LAMMPS must be adjusted
|
the command lines for building and testing LAMMPS must be adjusted
|
||||||
accordingly.
|
accordingly.
|
||||||
|
|
||||||
|
The LAMMPS cmake folder contains a ``CMakeSettings.json`` file with
|
||||||
|
build configurations for MSVC compilers and the MS provided Clang
|
||||||
|
compiler package in Debug and Release mode.
|
||||||
|
|
||||||
To support running in parallel you can compile with OpenMP enabled using
|
To support running in parallel you can compile with OpenMP enabled using
|
||||||
the OPENMP package or install Microsoft MPI (including the SDK) and compile
|
the OPENMP package or install Microsoft MPI (including the SDK) and compile
|
||||||
LAMMPS with MPI enabled.
|
LAMMPS with MPI enabled.
|
||||||
@ -117,8 +129,55 @@ LAMMPS with MPI enabled.
|
|||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
This is work in progress and you should contact the LAMMPS developers
|
This is work in progress and you should contact the LAMMPS developers
|
||||||
via GitHub, the forum, or the mailing list, if you have questions or
|
via GitHub or the `LAMMPS forum at MatSci <https://matsci.org/c/lammps/lammps-development/>`_,
|
||||||
LAMMPS specific problems.
|
if you have questions or LAMMPS specific problems.
|
||||||
|
|
||||||
|
.. _oneapi:
|
||||||
|
|
||||||
|
Using Intel oneAPI Compilers and Libraries
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. versionadded:: 31May2022
|
||||||
|
|
||||||
|
After installing the `Intel oneAPI
|
||||||
|
<https://www.intel.com/content/www/us/en/developer/tools/oneapi/toolkits.html>`_
|
||||||
|
base toolkit and the HPC toolkit, it is also possible to compile large
|
||||||
|
parts of LAMMPS natively on Windows using Intel compilers. The HPC
|
||||||
|
toolkit provides two sets of C/C++ and Fortran compilers: the so-called
|
||||||
|
"classic" compilers (``icl.exe`` and ``ifort.exe``) and newer, LLVM
|
||||||
|
based compilers (``icx.exe`` and ``ifx.exe``). In addition to the
|
||||||
|
compilers and their dependent modules, also the thread building blocks
|
||||||
|
(TBB) and the math kernel library (MKL) need to be installed. Two
|
||||||
|
presets (``cmake/presets/windows-intel-llvm.cmake`` and
|
||||||
|
``cmake/presets/windows-intel-classic.cmake``) are provided for
|
||||||
|
selecting the LLVM based or classic compilers, respectively. The preset
|
||||||
|
``cmake/presets/windows.cmake`` enables compatible packages that are not
|
||||||
|
dependent on additional features or libraries. You **must** use the
|
||||||
|
CMake based build procedure and use Ninja as build tool. For compiling
|
||||||
|
from the command prompt, thus both `CMake <https://cmake.org>`_ and
|
||||||
|
`Ninja-build <https://ninja-build.org>`_ binaries must be installed. It
|
||||||
|
is also possible to use Visual Studio, if it is started (``devenv.exe``)
|
||||||
|
from a command prompt that has the Intel oneAPI compilers enabled. The
|
||||||
|
Visual Studio settings file in the ``cmake`` folder contains
|
||||||
|
configurations for both compiler variants in debug and release settings.
|
||||||
|
Those will use the CMake and Ninja binaries bundled with Visual Studio,
|
||||||
|
thus a separate installation is not required.
|
||||||
|
|
||||||
|
.. admonition:: Known Limitations
|
||||||
|
:class: note
|
||||||
|
|
||||||
|
In addition to portability issues with several packages and external
|
||||||
|
libraries, the classic Intel compilers are currently not able to
|
||||||
|
compile the googletest libraries and thus enabling the ``-DENABLE_TESTING``
|
||||||
|
option will result in compilation failure. The LLVM based compilers
|
||||||
|
are compatible.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This is work in progress and you should contact the LAMMPS developers
|
||||||
|
via GitHub or the `LAMMPS forum at MatSci <https://matsci.org/c/lammps/lammps-development/>`_,
|
||||||
|
if you have questions or LAMMPS specific problems.
|
||||||
|
|
||||||
|
|
||||||
.. _cross:
|
.. _cross:
|
||||||
|
|
||||||
@ -144,14 +203,3 @@ LAMMPS developers. We instead rely on the feedback of the users
|
|||||||
of these pre-compiled LAMMPS packages for Windows. We will try to resolve
|
of these pre-compiled LAMMPS packages for Windows. We will try to resolve
|
||||||
issues to the best of our abilities if we become aware of them. However
|
issues to the best of our abilities if we become aware of them. However
|
||||||
this is subject to time constraints and focus on HPC platforms.
|
this is subject to time constraints and focus on HPC platforms.
|
||||||
|
|
||||||
.. _native:
|
|
||||||
|
|
||||||
Native Visual C++ support
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Support for the Visual C++ compilers is currently not available. The
|
|
||||||
CMake build system is capable of creating suitable a Visual Studio
|
|
||||||
style build environment, but the LAMMPS source code itself is not
|
|
||||||
ported to fully support Visual C++. Volunteers to take on this task
|
|
||||||
are welcome.
|
|
||||||
|
|||||||
@ -21,6 +21,7 @@ commands in it are used to define a LAMMPS simulation.
|
|||||||
Commands_pair
|
Commands_pair
|
||||||
Commands_bond
|
Commands_bond
|
||||||
Commands_kspace
|
Commands_kspace
|
||||||
|
Commands_dump
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|||||||
@ -10,11 +10,12 @@
|
|||||||
* :ref:`Dihedral styles <dihedral>`
|
* :ref:`Dihedral styles <dihedral>`
|
||||||
* :ref:`Improper styles <improper>`
|
* :ref:`Improper styles <improper>`
|
||||||
* :doc:`KSpace styles <Commands_kspace>`
|
* :doc:`KSpace styles <Commands_kspace>`
|
||||||
|
* :doc:`Dump styles <Commands_dump>`
|
||||||
|
|
||||||
General commands
|
General commands
|
||||||
================
|
================
|
||||||
|
|
||||||
An alphabetic list of all general LAMMPS commands.
|
An alphabetic list of general LAMMPS commands.
|
||||||
|
|
||||||
.. table_from_list::
|
.. table_from_list::
|
||||||
:columns: 5
|
:columns: 5
|
||||||
@ -47,20 +48,16 @@ An alphabetic list of all general LAMMPS commands.
|
|||||||
* :doc:`displace_atoms <displace_atoms>`
|
* :doc:`displace_atoms <displace_atoms>`
|
||||||
* :doc:`dump <dump>`
|
* :doc:`dump <dump>`
|
||||||
* :doc:`dump_modify <dump_modify>`
|
* :doc:`dump_modify <dump_modify>`
|
||||||
* :doc:`dynamical_matrix (k) <dynamical_matrix>`
|
|
||||||
* :doc:`echo <echo>`
|
* :doc:`echo <echo>`
|
||||||
* :doc:`fix <fix>`
|
* :doc:`fix <fix>`
|
||||||
* :doc:`fix_modify <fix_modify>`
|
* :doc:`fix_modify <fix_modify>`
|
||||||
* :doc:`group <group>`
|
* :doc:`group <group>`
|
||||||
* :doc:`group2ndx <group2ndx>`
|
|
||||||
* :doc:`hyper <hyper>`
|
|
||||||
* :doc:`if <if>`
|
* :doc:`if <if>`
|
||||||
* :doc:`improper_coeff <improper_coeff>`
|
* :doc:`improper_coeff <improper_coeff>`
|
||||||
* :doc:`improper_style <improper_style>`
|
* :doc:`improper_style <improper_style>`
|
||||||
* :doc:`include <include>`
|
* :doc:`include <include>`
|
||||||
* :doc:`info <info>`
|
* :doc:`info <info>`
|
||||||
* :doc:`jump <jump>`
|
* :doc:`jump <jump>`
|
||||||
* :doc:`kim <kim_commands>`
|
|
||||||
* :doc:`kspace_modify <kspace_modify>`
|
* :doc:`kspace_modify <kspace_modify>`
|
||||||
* :doc:`kspace_style <kspace_style>`
|
* :doc:`kspace_style <kspace_style>`
|
||||||
* :doc:`label <label>`
|
* :doc:`label <label>`
|
||||||
@ -68,16 +65,10 @@ An alphabetic list of all general LAMMPS commands.
|
|||||||
* :doc:`lattice <lattice>`
|
* :doc:`lattice <lattice>`
|
||||||
* :doc:`log <log>`
|
* :doc:`log <log>`
|
||||||
* :doc:`mass <mass>`
|
* :doc:`mass <mass>`
|
||||||
* :doc:`mdi/engine <mdi_engine>`
|
|
||||||
* :doc:`message <message>`
|
|
||||||
* :doc:`minimize <minimize>`
|
* :doc:`minimize <minimize>`
|
||||||
* :doc:`min_modify <min_modify>`
|
* :doc:`min_modify <min_modify>`
|
||||||
* :doc:`min_style <min_style>`
|
* :doc:`min_style <min_style>`
|
||||||
* :doc:`min_style spin <min_spin>`
|
|
||||||
* :doc:`molecule <molecule>`
|
* :doc:`molecule <molecule>`
|
||||||
* :doc:`ndx2group <group2ndx>`
|
|
||||||
* :doc:`neb <neb>`
|
|
||||||
* :doc:`neb/spin <neb_spin>`
|
|
||||||
* :doc:`neigh_modify <neigh_modify>`
|
* :doc:`neigh_modify <neigh_modify>`
|
||||||
* :doc:`neighbor <neighbor>`
|
* :doc:`neighbor <neighbor>`
|
||||||
* :doc:`newton <newton>`
|
* :doc:`newton <newton>`
|
||||||
@ -88,11 +79,8 @@ An alphabetic list of all general LAMMPS commands.
|
|||||||
* :doc:`pair_style <pair_style>`
|
* :doc:`pair_style <pair_style>`
|
||||||
* :doc:`pair_write <pair_write>`
|
* :doc:`pair_write <pair_write>`
|
||||||
* :doc:`partition <partition>`
|
* :doc:`partition <partition>`
|
||||||
* :doc:`plugin <plugin>`
|
|
||||||
* :doc:`prd <prd>`
|
|
||||||
* :doc:`print <print>`
|
* :doc:`print <print>`
|
||||||
* :doc:`processors <processors>`
|
* :doc:`processors <processors>`
|
||||||
* :doc:`python <python>`
|
|
||||||
* :doc:`quit <quit>`
|
* :doc:`quit <quit>`
|
||||||
* :doc:`read_data <read_data>`
|
* :doc:`read_data <read_data>`
|
||||||
* :doc:`read_dump <read_dump>`
|
* :doc:`read_dump <read_dump>`
|
||||||
@ -106,19 +94,13 @@ An alphabetic list of all general LAMMPS commands.
|
|||||||
* :doc:`restart <restart>`
|
* :doc:`restart <restart>`
|
||||||
* :doc:`run <run>`
|
* :doc:`run <run>`
|
||||||
* :doc:`run_style <run_style>`
|
* :doc:`run_style <run_style>`
|
||||||
* :doc:`server <server>`
|
|
||||||
* :doc:`set <set>`
|
* :doc:`set <set>`
|
||||||
* :doc:`shell <shell>`
|
* :doc:`shell <shell>`
|
||||||
* :doc:`special_bonds <special_bonds>`
|
* :doc:`special_bonds <special_bonds>`
|
||||||
* :doc:`suffix <suffix>`
|
* :doc:`suffix <suffix>`
|
||||||
* :doc:`tad <tad>`
|
|
||||||
* :doc:`temper <temper>`
|
|
||||||
* :doc:`temper/grem <temper_grem>`
|
|
||||||
* :doc:`temper/npt <temper_npt>`
|
|
||||||
* :doc:`thermo <thermo>`
|
* :doc:`thermo <thermo>`
|
||||||
* :doc:`thermo_modify <thermo_modify>`
|
* :doc:`thermo_modify <thermo_modify>`
|
||||||
* :doc:`thermo_style <thermo_style>`
|
* :doc:`thermo_style <thermo_style>`
|
||||||
* :doc:`third_order (k) <third_order>`
|
|
||||||
* :doc:`timer <timer>`
|
* :doc:`timer <timer>`
|
||||||
* :doc:`timestep <timestep>`
|
* :doc:`timestep <timestep>`
|
||||||
* :doc:`uncompute <uncompute>`
|
* :doc:`uncompute <uncompute>`
|
||||||
@ -131,3 +113,27 @@ An alphabetic list of all general LAMMPS commands.
|
|||||||
* :doc:`write_data <write_data>`
|
* :doc:`write_data <write_data>`
|
||||||
* :doc:`write_dump <write_dump>`
|
* :doc:`write_dump <write_dump>`
|
||||||
* :doc:`write_restart <write_restart>`
|
* :doc:`write_restart <write_restart>`
|
||||||
|
|
||||||
|
Additional general LAMMPS commands provided by packages. A few
|
||||||
|
commands have accelerated versions. This is indicated by an
|
||||||
|
additional letter in parenthesis: k = KOKKOS.
|
||||||
|
|
||||||
|
.. table_from_list::
|
||||||
|
:columns: 5
|
||||||
|
|
||||||
|
* :doc:`dynamical_matrix (k) <dynamical_matrix>`
|
||||||
|
* :doc:`group2ndx <group2ndx>`
|
||||||
|
* :doc:`hyper <hyper>`
|
||||||
|
* :doc:`kim <kim_commands>`
|
||||||
|
* :doc:`mdi <mdi>`
|
||||||
|
* :doc:`ndx2group <group2ndx>`
|
||||||
|
* :doc:`neb <neb>`
|
||||||
|
* :doc:`neb/spin <neb_spin>`
|
||||||
|
* :doc:`plugin <plugin>`
|
||||||
|
* :doc:`prd <prd>`
|
||||||
|
* :doc:`python <python>`
|
||||||
|
* :doc:`tad <tad>`
|
||||||
|
* :doc:`temper <temper>`
|
||||||
|
* :doc:`temper/grem <temper_grem>`
|
||||||
|
* :doc:`temper/npt <temper_npt>`
|
||||||
|
* :doc:`third_order (k) <third_order>`
|
||||||
|
|||||||
@ -10,6 +10,7 @@
|
|||||||
* :ref:`Dihedral styles <dihedral>`
|
* :ref:`Dihedral styles <dihedral>`
|
||||||
* :ref:`Improper styles <improper>`
|
* :ref:`Improper styles <improper>`
|
||||||
* :doc:`KSpace styles <Commands_kspace>`
|
* :doc:`KSpace styles <Commands_kspace>`
|
||||||
|
* :doc:`Dump styles <Commands_dump>`
|
||||||
|
|
||||||
.. _bond:
|
.. _bond:
|
||||||
|
|
||||||
@ -32,6 +33,8 @@ OPT.
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
|
* :doc:`bpm/rotational <bond_bpm_rotational>`
|
||||||
|
* :doc:`bpm/spring <bond_bpm_spring>`
|
||||||
* :doc:`class2 (ko) <bond_class2>`
|
* :doc:`class2 (ko) <bond_class2>`
|
||||||
* :doc:`fene (iko) <bond_fene>`
|
* :doc:`fene (iko) <bond_fene>`
|
||||||
* :doc:`fene/expand (o) <bond_fene_expand>`
|
* :doc:`fene/expand (o) <bond_fene_expand>`
|
||||||
@ -72,6 +75,7 @@ OPT.
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
|
* :doc:`amoeba <angle_amoeba>`
|
||||||
* :doc:`charmm (iko) <angle_charmm>`
|
* :doc:`charmm (iko) <angle_charmm>`
|
||||||
* :doc:`class2 (ko) <angle_class2>`
|
* :doc:`class2 (ko) <angle_class2>`
|
||||||
* :doc:`class2/p6 <angle_class2>`
|
* :doc:`class2/p6 <angle_class2>`
|
||||||
@ -86,11 +90,11 @@ OPT.
|
|||||||
* :doc:`dipole (o) <angle_dipole>`
|
* :doc:`dipole (o) <angle_dipole>`
|
||||||
* :doc:`fourier (o) <angle_fourier>`
|
* :doc:`fourier (o) <angle_fourier>`
|
||||||
* :doc:`fourier/simple (o) <angle_fourier_simple>`
|
* :doc:`fourier/simple (o) <angle_fourier_simple>`
|
||||||
* :doc:`gaussian <angle_gaussian>` - multicentered Gaussian-based angle potential
|
* :doc:`gaussian <angle_gaussian>`
|
||||||
* :doc:`harmonic (iko) <angle_harmonic>`
|
* :doc:`harmonic (iko) <angle_harmonic>`
|
||||||
* :doc:`mm3 <angle_mm3>`
|
* :doc:`mm3 <angle_mm3>`
|
||||||
* :doc:`quartic (o) <angle_quartic>`
|
* :doc:`quartic (o) <angle_quartic>`
|
||||||
* :doc:`sdk (o) <angle_sdk>`
|
* :doc:`spica (o) <angle_spica>`
|
||||||
* :doc:`table (o) <angle_table>`
|
* :doc:`table (o) <angle_table>`
|
||||||
|
|
||||||
.. _dihedral:
|
.. _dihedral:
|
||||||
@ -150,6 +154,7 @@ OPT.
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
|
* :doc:`amoeba <improper_amoeba>`
|
||||||
* :doc:`class2 (ko) <improper_class2>`
|
* :doc:`class2 (ko) <improper_class2>`
|
||||||
* :doc:`cossq (o) <improper_cossq>`
|
* :doc:`cossq (o) <improper_cossq>`
|
||||||
* :doc:`cvff (io) <improper_cvff>`
|
* :doc:`cvff (io) <improper_cvff>`
|
||||||
|
|||||||
@ -10,6 +10,7 @@
|
|||||||
* :ref:`Dihedral styles <dihedral>`
|
* :ref:`Dihedral styles <dihedral>`
|
||||||
* :ref:`Improper styles <improper>`
|
* :ref:`Improper styles <improper>`
|
||||||
* :doc:`KSpace styles <Commands_kspace>`
|
* :doc:`KSpace styles <Commands_kspace>`
|
||||||
|
* :doc:`Dump styles <Commands_dump>`
|
||||||
|
|
||||||
Compute commands
|
Compute commands
|
||||||
================
|
================
|
||||||
@ -33,6 +34,7 @@ KOKKOS, o = OPENMP, t = OPT.
|
|||||||
* :doc:`body/local <compute_body_local>`
|
* :doc:`body/local <compute_body_local>`
|
||||||
* :doc:`bond <compute_bond>`
|
* :doc:`bond <compute_bond>`
|
||||||
* :doc:`bond/local <compute_bond_local>`
|
* :doc:`bond/local <compute_bond_local>`
|
||||||
|
* :doc:`born/matrix <compute_born_matrix>`
|
||||||
* :doc:`centro/atom <compute_centro_atom>`
|
* :doc:`centro/atom <compute_centro_atom>`
|
||||||
* :doc:`centroid/stress/atom <compute_stress_atom>`
|
* :doc:`centroid/stress/atom <compute_stress_atom>`
|
||||||
* :doc:`chunk/atom <compute_chunk_atom>`
|
* :doc:`chunk/atom <compute_chunk_atom>`
|
||||||
@ -63,6 +65,7 @@ KOKKOS, o = OPENMP, t = OPT.
|
|||||||
* :doc:`event/displace <compute_event_displace>`
|
* :doc:`event/displace <compute_event_displace>`
|
||||||
* :doc:`fabric <compute_fabric>`
|
* :doc:`fabric <compute_fabric>`
|
||||||
* :doc:`fep <compute_fep>`
|
* :doc:`fep <compute_fep>`
|
||||||
|
* :doc:`fep/ta <compute_fep_ta>`
|
||||||
* :doc:`force/tally <compute_tally>`
|
* :doc:`force/tally <compute_tally>`
|
||||||
* :doc:`fragment/atom <compute_cluster_atom>`
|
* :doc:`fragment/atom <compute_cluster_atom>`
|
||||||
* :doc:`global/atom <compute_global_atom>`
|
* :doc:`global/atom <compute_global_atom>`
|
||||||
@ -90,6 +93,7 @@ KOKKOS, o = OPENMP, t = OPT.
|
|||||||
* :doc:`msd <compute_msd>`
|
* :doc:`msd <compute_msd>`
|
||||||
* :doc:`msd/chunk <compute_msd_chunk>`
|
* :doc:`msd/chunk <compute_msd_chunk>`
|
||||||
* :doc:`msd/nongauss <compute_msd_nongauss>`
|
* :doc:`msd/nongauss <compute_msd_nongauss>`
|
||||||
|
* :doc:`nbond/atom <compute_nbond_atom>`
|
||||||
* :doc:`omega/chunk <compute_omega_chunk>`
|
* :doc:`omega/chunk <compute_omega_chunk>`
|
||||||
* :doc:`orientorder/atom (k) <compute_orientorder_atom>`
|
* :doc:`orientorder/atom (k) <compute_orientorder_atom>`
|
||||||
* :doc:`pair <compute_pair>`
|
* :doc:`pair <compute_pair>`
|
||||||
@ -135,6 +139,8 @@ KOKKOS, o = OPENMP, t = OPT.
|
|||||||
* :doc:`smd/vol <compute_smd_vol>`
|
* :doc:`smd/vol <compute_smd_vol>`
|
||||||
* :doc:`snap <compute_sna_atom>`
|
* :doc:`snap <compute_sna_atom>`
|
||||||
* :doc:`sna/atom <compute_sna_atom>`
|
* :doc:`sna/atom <compute_sna_atom>`
|
||||||
|
* :doc:`sna/grid <compute_sna_atom>`
|
||||||
|
* :doc:`sna/grid/local <compute_sna_atom>`
|
||||||
* :doc:`snad/atom <compute_sna_atom>`
|
* :doc:`snad/atom <compute_sna_atom>`
|
||||||
* :doc:`snav/atom <compute_sna_atom>`
|
* :doc:`snav/atom <compute_sna_atom>`
|
||||||
* :doc:`sph/e/atom <compute_sph_e_atom>`
|
* :doc:`sph/e/atom <compute_sph_e_atom>`
|
||||||
|
|||||||
56
doc/src/Commands_dump.rst
Normal file
56
doc/src/Commands_dump.rst
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
.. table_from_list::
|
||||||
|
:columns: 3
|
||||||
|
|
||||||
|
* :doc:`General commands <Commands_all>`
|
||||||
|
* :doc:`Fix styles <Commands_fix>`
|
||||||
|
* :doc:`Compute styles <Commands_compute>`
|
||||||
|
* :doc:`Pair styles <Commands_pair>`
|
||||||
|
* :ref:`Bond styles <bond>`
|
||||||
|
* :ref:`Angle styles <angle>`
|
||||||
|
* :ref:`Dihedral styles <dihedral>`
|
||||||
|
* :ref:`Improper styles <improper>`
|
||||||
|
* :doc:`KSpace styles <Commands_kspace>`
|
||||||
|
* :doc:`Dump styles <Commands_dump>`
|
||||||
|
|
||||||
|
Dump commands
|
||||||
|
=============
|
||||||
|
|
||||||
|
An alphabetic list of all LAMMPS :doc:`dump <dump>` commands.
|
||||||
|
|
||||||
|
.. table_from_list::
|
||||||
|
:columns: 5
|
||||||
|
|
||||||
|
* :doc:`atom <dump>`
|
||||||
|
* :doc:`atom/adios <dump_adios>`
|
||||||
|
* :doc:`atom/gz <dump>`
|
||||||
|
* :doc:`atom/mpiio <dump>`
|
||||||
|
* :doc:`atom/zstd <dump>`
|
||||||
|
* :doc:`cfg <dump>`
|
||||||
|
* :doc:`cfg/gz <dump>`
|
||||||
|
* :doc:`cfg/mpiio <dump>`
|
||||||
|
* :doc:`cfg/uef <dump_cfg_uef>`
|
||||||
|
* :doc:`cfg/zstd <dump>`
|
||||||
|
* :doc:`custom <dump>`
|
||||||
|
* :doc:`custom/adios <dump_adios>`
|
||||||
|
* :doc:`custom/gz <dump>`
|
||||||
|
* :doc:`custom/mpiio <dump>`
|
||||||
|
* :doc:`custom/zstd <dump>`
|
||||||
|
* :doc:`dcd <dump>`
|
||||||
|
* :doc:`deprecated <dump>`
|
||||||
|
* :doc:`h5md <dump_h5md>`
|
||||||
|
* :doc:`image <dump_image>`
|
||||||
|
* :doc:`local <dump>`
|
||||||
|
* :doc:`local/gz <dump>`
|
||||||
|
* :doc:`local/zstd <dump>`
|
||||||
|
* :doc:`molfile <dump_molfile>`
|
||||||
|
* :doc:`movie <dump_image>`
|
||||||
|
* :doc:`netcdf <dump_netcdf>`
|
||||||
|
* :doc:`netcdf/mpiio <dump>`
|
||||||
|
* :doc:`vtk <dump_vtk>`
|
||||||
|
* :doc:`xtc <dump>`
|
||||||
|
* :doc:`xyz <dump>`
|
||||||
|
* :doc:`xyz/gz <dump>`
|
||||||
|
* :doc:`xyz/mpiio <dump>`
|
||||||
|
* :doc:`xyz/zstd <dump>`
|
||||||
|
* :doc:`yaml <dump>`
|
||||||
|
|
||||||
@ -10,6 +10,7 @@
|
|||||||
* :ref:`Dihedral styles <dihedral>`
|
* :ref:`Dihedral styles <dihedral>`
|
||||||
* :ref:`Improper styles <improper>`
|
* :ref:`Improper styles <improper>`
|
||||||
* :doc:`KSpace styles <Commands_kspace>`
|
* :doc:`KSpace styles <Commands_kspace>`
|
||||||
|
* :doc:`Dump styles <Commands_dump>`
|
||||||
|
|
||||||
Fix commands
|
Fix commands
|
||||||
============
|
============
|
||||||
@ -28,6 +29,8 @@ OPT.
|
|||||||
* :doc:`adapt/fep <fix_adapt_fep>`
|
* :doc:`adapt/fep <fix_adapt_fep>`
|
||||||
* :doc:`addforce <fix_addforce>`
|
* :doc:`addforce <fix_addforce>`
|
||||||
* :doc:`addtorque <fix_addtorque>`
|
* :doc:`addtorque <fix_addtorque>`
|
||||||
|
* :doc:`amoeba/bitorsion <fix_amoeba_bitorsion>`
|
||||||
|
* :doc:`amoeba/pitorsion <fix_amoeba_pitorsion>`
|
||||||
* :doc:`append/atoms <fix_append_atoms>`
|
* :doc:`append/atoms <fix_append_atoms>`
|
||||||
* :doc:`atc <fix_atc>`
|
* :doc:`atc <fix_atc>`
|
||||||
* :doc:`atom/swap <fix_atom_swap>`
|
* :doc:`atom/swap <fix_atom_swap>`
|
||||||
@ -51,10 +54,10 @@ OPT.
|
|||||||
* :doc:`bond/swap <fix_bond_swap>`
|
* :doc:`bond/swap <fix_bond_swap>`
|
||||||
* :doc:`box/relax <fix_box_relax>`
|
* :doc:`box/relax <fix_box_relax>`
|
||||||
* :doc:`charge/regulation <fix_charge_regulation>`
|
* :doc:`charge/regulation <fix_charge_regulation>`
|
||||||
* :doc:`client/md <fix_client_md>`
|
|
||||||
* :doc:`cmap <fix_cmap>`
|
* :doc:`cmap <fix_cmap>`
|
||||||
* :doc:`colvars <fix_colvars>`
|
* :doc:`colvars <fix_colvars>`
|
||||||
* :doc:`controller <fix_controller>`
|
* :doc:`controller <fix_controller>`
|
||||||
|
* :doc:`damping/cundall <fix_damping_cundall>`
|
||||||
* :doc:`deform (k) <fix_deform>`
|
* :doc:`deform (k) <fix_deform>`
|
||||||
* :doc:`deposit <fix_deposit>`
|
* :doc:`deposit <fix_deposit>`
|
||||||
* :doc:`dpd/energy (k) <fix_dpd_energy>`
|
* :doc:`dpd/energy (k) <fix_dpd_energy>`
|
||||||
@ -66,6 +69,9 @@ OPT.
|
|||||||
* :doc:`edpd/source <fix_dpd_source>`
|
* :doc:`edpd/source <fix_dpd_source>`
|
||||||
* :doc:`efield <fix_efield>`
|
* :doc:`efield <fix_efield>`
|
||||||
* :doc:`ehex <fix_ehex>`
|
* :doc:`ehex <fix_ehex>`
|
||||||
|
* :doc:`electrode/conp (i) <fix_electrode_conp>`
|
||||||
|
* :doc:`electrode/conq (i) <fix_electrode_conp>`
|
||||||
|
* :doc:`electrode/thermo (i) <fix_electrode_conp>`
|
||||||
* :doc:`electron/stopping <fix_electron_stopping>`
|
* :doc:`electron/stopping <fix_electron_stopping>`
|
||||||
* :doc:`electron/stopping/fit <fix_electron_stopping>`
|
* :doc:`electron/stopping/fit <fix_electron_stopping>`
|
||||||
* :doc:`enforce2d (k) <fix_enforce2d>`
|
* :doc:`enforce2d (k) <fix_enforce2d>`
|
||||||
@ -100,7 +106,7 @@ OPT.
|
|||||||
* :doc:`lb/viscous <fix_lb_viscous>`
|
* :doc:`lb/viscous <fix_lb_viscous>`
|
||||||
* :doc:`lineforce <fix_lineforce>`
|
* :doc:`lineforce <fix_lineforce>`
|
||||||
* :doc:`manifoldforce <fix_manifoldforce>`
|
* :doc:`manifoldforce <fix_manifoldforce>`
|
||||||
* :doc:`mdi/engine <fix_mdi_engine>`
|
* :doc:`mdi/qm <fix_mdi_qm>`
|
||||||
* :doc:`meso/move <fix_meso_move>`
|
* :doc:`meso/move <fix_meso_move>`
|
||||||
* :doc:`mol/swap <fix_mol_swap>`
|
* :doc:`mol/swap <fix_mol_swap>`
|
||||||
* :doc:`momentum (k) <fix_momentum>`
|
* :doc:`momentum (k) <fix_momentum>`
|
||||||
@ -141,6 +147,7 @@ OPT.
|
|||||||
* :doc:`nve/manifold/rattle <fix_nve_manifold_rattle>`
|
* :doc:`nve/manifold/rattle <fix_nve_manifold_rattle>`
|
||||||
* :doc:`nve/noforce <fix_nve_noforce>`
|
* :doc:`nve/noforce <fix_nve_noforce>`
|
||||||
* :doc:`nve/sphere (ko) <fix_nve_sphere>`
|
* :doc:`nve/sphere (ko) <fix_nve_sphere>`
|
||||||
|
* :doc:`nve/bpm/sphere <fix_nve_bpm_sphere>`
|
||||||
* :doc:`nve/spin <fix_nve_spin>`
|
* :doc:`nve/spin <fix_nve_spin>`
|
||||||
* :doc:`nve/tri <fix_nve_tri>`
|
* :doc:`nve/tri <fix_nve_tri>`
|
||||||
* :doc:`nvk <fix_nvk>`
|
* :doc:`nvk <fix_nvk>`
|
||||||
@ -158,7 +165,6 @@ OPT.
|
|||||||
* :doc:`orient/fcc <fix_orient>`
|
* :doc:`orient/fcc <fix_orient>`
|
||||||
* :doc:`orient/eco <fix_orient_eco>`
|
* :doc:`orient/eco <fix_orient_eco>`
|
||||||
* :doc:`pafi <fix_pafi>`
|
* :doc:`pafi <fix_pafi>`
|
||||||
* :doc:`pair/tracker <fix_pair_tracker>`
|
|
||||||
* :doc:`phonon <fix_phonon>`
|
* :doc:`phonon <fix_phonon>`
|
||||||
* :doc:`pimd <fix_pimd>`
|
* :doc:`pimd <fix_pimd>`
|
||||||
* :doc:`planeforce <fix_planeforce>`
|
* :doc:`planeforce <fix_planeforce>`
|
||||||
@ -243,6 +249,7 @@ OPT.
|
|||||||
* :doc:`vector <fix_vector>`
|
* :doc:`vector <fix_vector>`
|
||||||
* :doc:`viscosity <fix_viscosity>`
|
* :doc:`viscosity <fix_viscosity>`
|
||||||
* :doc:`viscous <fix_viscous>`
|
* :doc:`viscous <fix_viscous>`
|
||||||
|
* :doc:`viscous/sphere <fix_viscous_sphere>`
|
||||||
* :doc:`wall/body/polygon <fix_wall_body_polygon>`
|
* :doc:`wall/body/polygon <fix_wall_body_polygon>`
|
||||||
* :doc:`wall/body/polyhedron <fix_wall_body_polyhedron>`
|
* :doc:`wall/body/polyhedron <fix_wall_body_polyhedron>`
|
||||||
* :doc:`wall/colloid <fix_wall>`
|
* :doc:`wall/colloid <fix_wall>`
|
||||||
|
|||||||
@ -10,6 +10,7 @@
|
|||||||
* :ref:`Dihedral styles <dihedral>`
|
* :ref:`Dihedral styles <dihedral>`
|
||||||
* :ref:`Improper styles <improper>`
|
* :ref:`Improper styles <improper>`
|
||||||
* :doc:`KSpace styles <Commands_kspace>`
|
* :doc:`KSpace styles <Commands_kspace>`
|
||||||
|
* :doc:`Dump styles <Commands_dump>`
|
||||||
|
|
||||||
KSpace solvers
|
KSpace solvers
|
||||||
==============
|
==============
|
||||||
@ -27,6 +28,7 @@ OPT.
|
|||||||
* :doc:`ewald/disp/dipole <kspace_style>`
|
* :doc:`ewald/disp/dipole <kspace_style>`
|
||||||
* :doc:`ewald/dipole <kspace_style>`
|
* :doc:`ewald/dipole <kspace_style>`
|
||||||
* :doc:`ewald/dipole/spin <kspace_style>`
|
* :doc:`ewald/dipole/spin <kspace_style>`
|
||||||
|
* :doc:`ewald/electrode <kspace_style>`
|
||||||
* :doc:`msm (o) <kspace_style>`
|
* :doc:`msm (o) <kspace_style>`
|
||||||
* :doc:`msm/cg (o) <kspace_style>`
|
* :doc:`msm/cg (o) <kspace_style>`
|
||||||
* :doc:`msm/dielectric <kspace_style>`
|
* :doc:`msm/dielectric <kspace_style>`
|
||||||
@ -41,4 +43,5 @@ OPT.
|
|||||||
* :doc:`pppm/stagger <kspace_style>`
|
* :doc:`pppm/stagger <kspace_style>`
|
||||||
* :doc:`pppm/tip4p (o) <kspace_style>`
|
* :doc:`pppm/tip4p (o) <kspace_style>`
|
||||||
* :doc:`pppm/dielectric <kspace_style>`
|
* :doc:`pppm/dielectric <kspace_style>`
|
||||||
|
* :doc:`pppm/electrode (i) <kspace_style>`
|
||||||
* :doc:`scafacos <kspace_style>`
|
* :doc:`scafacos <kspace_style>`
|
||||||
|
|||||||
@ -10,6 +10,7 @@
|
|||||||
* :ref:`Dihedral styles <dihedral>`
|
* :ref:`Dihedral styles <dihedral>`
|
||||||
* :ref:`Improper styles <improper>`
|
* :ref:`Improper styles <improper>`
|
||||||
* :doc:`KSpace styles <Commands_kspace>`
|
* :doc:`KSpace styles <Commands_kspace>`
|
||||||
|
* :doc:`Dump styles <Commands_dump>`
|
||||||
|
|
||||||
Pair_style potentials
|
Pair_style potentials
|
||||||
======================
|
======================
|
||||||
@ -34,10 +35,11 @@ OPT.
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* :doc:`adp (o) <pair_adp>`
|
* :doc:`adp (ko) <pair_adp>`
|
||||||
* :doc:`agni (o) <pair_agni>`
|
* :doc:`agni (o) <pair_agni>`
|
||||||
* :doc:`airebo (io) <pair_airebo>`
|
* :doc:`airebo (io) <pair_airebo>`
|
||||||
* :doc:`airebo/morse (io) <pair_airebo>`
|
* :doc:`airebo/morse (io) <pair_airebo>`
|
||||||
|
* :doc:`amoeba <pair_amoeba>`
|
||||||
* :doc:`atm <pair_atm>`
|
* :doc:`atm <pair_atm>`
|
||||||
* :doc:`awpmd/cut <pair_awpmd>`
|
* :doc:`awpmd/cut <pair_awpmd>`
|
||||||
* :doc:`beck (go) <pair_beck>`
|
* :doc:`beck (go) <pair_beck>`
|
||||||
@ -53,6 +55,7 @@ OPT.
|
|||||||
* :doc:`born/coul/msm (o) <pair_born>`
|
* :doc:`born/coul/msm (o) <pair_born>`
|
||||||
* :doc:`born/coul/wolf (go) <pair_born>`
|
* :doc:`born/coul/wolf (go) <pair_born>`
|
||||||
* :doc:`born/coul/wolf/cs (g) <pair_cs>`
|
* :doc:`born/coul/wolf/cs (g) <pair_cs>`
|
||||||
|
* :doc:`bpm/spring <pair_bpm_spring>`
|
||||||
* :doc:`brownian (o) <pair_brownian>`
|
* :doc:`brownian (o) <pair_brownian>`
|
||||||
* :doc:`brownian/poly (o) <pair_brownian>`
|
* :doc:`brownian/poly (o) <pair_brownian>`
|
||||||
* :doc:`buck (giko) <pair_buck>`
|
* :doc:`buck (giko) <pair_buck>`
|
||||||
@ -88,12 +91,12 @@ OPT.
|
|||||||
* :doc:`coul/tt <pair_coul_tt>`
|
* :doc:`coul/tt <pair_coul_tt>`
|
||||||
* :doc:`coul/wolf (ko) <pair_coul>`
|
* :doc:`coul/wolf (ko) <pair_coul>`
|
||||||
* :doc:`coul/wolf/cs <pair_cs>`
|
* :doc:`coul/wolf/cs <pair_cs>`
|
||||||
* :doc:`dpd (gio) <pair_dpd>`
|
* :doc:`dpd (giko) <pair_dpd>`
|
||||||
* :doc:`dpd/fdt <pair_dpd_fdt>`
|
* :doc:`dpd/fdt <pair_dpd_fdt>`
|
||||||
* :doc:`dpd/ext <pair_dpd_ext>`
|
* :doc:`dpd/ext (k) <pair_dpd_ext>`
|
||||||
* :doc:`dpd/ext/tstat <pair_dpd_ext>`
|
* :doc:`dpd/ext/tstat (k) <pair_dpd_ext>`
|
||||||
* :doc:`dpd/fdt/energy (k) <pair_dpd_fdt>`
|
* :doc:`dpd/fdt/energy (k) <pair_dpd_fdt>`
|
||||||
* :doc:`dpd/tstat (go) <pair_dpd>`
|
* :doc:`dpd/tstat (gko) <pair_dpd>`
|
||||||
* :doc:`dsmc <pair_dsmc>`
|
* :doc:`dsmc <pair_dsmc>`
|
||||||
* :doc:`e3b <pair_e3b>`
|
* :doc:`e3b <pair_e3b>`
|
||||||
* :doc:`drip <pair_drip>`
|
* :doc:`drip <pair_drip>`
|
||||||
@ -123,8 +126,9 @@ OPT.
|
|||||||
* :doc:`hbond/dreiding/lj (o) <pair_hbond_dreiding>`
|
* :doc:`hbond/dreiding/lj (o) <pair_hbond_dreiding>`
|
||||||
* :doc:`hbond/dreiding/morse (o) <pair_hbond_dreiding>`
|
* :doc:`hbond/dreiding/morse (o) <pair_hbond_dreiding>`
|
||||||
* :doc:`hdnnp <pair_hdnnp>`
|
* :doc:`hdnnp <pair_hdnnp>`
|
||||||
* :doc:`ilp/graphene/hbn <pair_ilp_graphene_hbn>`
|
* :doc:`hippo <pair_amoeba>`
|
||||||
* :doc:`ilp/tmd <pair_ilp_tmd>`
|
* :doc:`ilp/graphene/hbn (t) <pair_ilp_graphene_hbn>`
|
||||||
|
* :doc:`ilp/tmd (t) <pair_ilp_tmd>`
|
||||||
* :doc:`kolmogorov/crespi/full <pair_kolmogorov_crespi_full>`
|
* :doc:`kolmogorov/crespi/full <pair_kolmogorov_crespi_full>`
|
||||||
* :doc:`kolmogorov/crespi/z <pair_kolmogorov_crespi_z>`
|
* :doc:`kolmogorov/crespi/z <pair_kolmogorov_crespi_z>`
|
||||||
* :doc:`lcbop <pair_lcbop>`
|
* :doc:`lcbop <pair_lcbop>`
|
||||||
@ -151,7 +155,7 @@ OPT.
|
|||||||
* :doc:`lj/cut/coul/cut/dielectric (o) <pair_dielectric>`
|
* :doc:`lj/cut/coul/cut/dielectric (o) <pair_dielectric>`
|
||||||
* :doc:`lj/cut/coul/cut/soft (o) <pair_fep_soft>`
|
* :doc:`lj/cut/coul/cut/soft (o) <pair_fep_soft>`
|
||||||
* :doc:`lj/cut/coul/debye (gko) <pair_lj_cut_coul>`
|
* :doc:`lj/cut/coul/debye (gko) <pair_lj_cut_coul>`
|
||||||
* :doc:`lj/cut/coul/debye/dielectric <pair_dielectric>`
|
* :doc:`lj/cut/coul/debye/dielectric (o) <pair_dielectric>`
|
||||||
* :doc:`lj/cut/coul/dsf (gko) <pair_lj_cut_coul>`
|
* :doc:`lj/cut/coul/dsf (gko) <pair_lj_cut_coul>`
|
||||||
* :doc:`lj/cut/coul/long (gikot) <pair_lj_cut_coul>`
|
* :doc:`lj/cut/coul/long (gikot) <pair_lj_cut_coul>`
|
||||||
* :doc:`lj/cut/coul/long/cs <pair_cs>`
|
* :doc:`lj/cut/coul/long/cs <pair_cs>`
|
||||||
@ -178,9 +182,9 @@ OPT.
|
|||||||
* :doc:`lj/long/tip4p/long (o) <pair_lj_long>`
|
* :doc:`lj/long/tip4p/long (o) <pair_lj_long>`
|
||||||
* :doc:`lj/mdf <pair_mdf>`
|
* :doc:`lj/mdf <pair_mdf>`
|
||||||
* :doc:`lj/relres (o) <pair_lj_relres>`
|
* :doc:`lj/relres (o) <pair_lj_relres>`
|
||||||
* :doc:`lj/sdk (gko) <pair_sdk>`
|
* :doc:`lj/spica (gko) <pair_spica>`
|
||||||
* :doc:`lj/sdk/coul/long (go) <pair_sdk>`
|
* :doc:`lj/spica/coul/long (go) <pair_spica>`
|
||||||
* :doc:`lj/sdk/coul/msm (o) <pair_sdk>`
|
* :doc:`lj/spica/coul/msm (o) <pair_spica>`
|
||||||
* :doc:`lj/sf/dipole/sf (go) <pair_dipole>`
|
* :doc:`lj/sf/dipole/sf (go) <pair_dipole>`
|
||||||
* :doc:`lj/smooth (go) <pair_lj_smooth>`
|
* :doc:`lj/smooth (go) <pair_lj_smooth>`
|
||||||
* :doc:`lj/smooth/linear (o) <pair_lj_smooth_linear>`
|
* :doc:`lj/smooth/linear (o) <pair_lj_smooth_linear>`
|
||||||
@ -193,7 +197,7 @@ OPT.
|
|||||||
* :doc:`lubricateU/poly <pair_lubricateU>`
|
* :doc:`lubricateU/poly <pair_lubricateU>`
|
||||||
* :doc:`mdpd <pair_mesodpd>`
|
* :doc:`mdpd <pair_mesodpd>`
|
||||||
* :doc:`mdpd/rhosum <pair_mesodpd>`
|
* :doc:`mdpd/rhosum <pair_mesodpd>`
|
||||||
* :doc:`meam <pair_meam>`
|
* :doc:`meam (k) <pair_meam>`
|
||||||
* :doc:`meam/spline (o) <pair_meam_spline>`
|
* :doc:`meam/spline (o) <pair_meam_spline>`
|
||||||
* :doc:`meam/sw/spline <pair_meam_sw_spline>`
|
* :doc:`meam/sw/spline <pair_meam_sw_spline>`
|
||||||
* :doc:`mesocnt <pair_mesocnt>`
|
* :doc:`mesocnt <pair_mesocnt>`
|
||||||
@ -230,7 +234,7 @@ OPT.
|
|||||||
* :doc:`oxrna2/stk <pair_oxrna2>`
|
* :doc:`oxrna2/stk <pair_oxrna2>`
|
||||||
* :doc:`oxrna2/xstk <pair_oxrna2>`
|
* :doc:`oxrna2/xstk <pair_oxrna2>`
|
||||||
* :doc:`oxrna2/coaxstk <pair_oxrna2>`
|
* :doc:`oxrna2/coaxstk <pair_oxrna2>`
|
||||||
* :doc:`pace <pair_pace>`
|
* :doc:`pace (k) <pair_pace>`
|
||||||
* :doc:`peri/eps <pair_peri>`
|
* :doc:`peri/eps <pair_peri>`
|
||||||
* :doc:`peri/lps (o) <pair_peri>`
|
* :doc:`peri/lps (o) <pair_peri>`
|
||||||
* :doc:`peri/pmb (o) <pair_peri>`
|
* :doc:`peri/pmb (o) <pair_peri>`
|
||||||
@ -242,8 +246,10 @@ OPT.
|
|||||||
* :doc:`reaxff (ko) <pair_reaxff>`
|
* :doc:`reaxff (ko) <pair_reaxff>`
|
||||||
* :doc:`rebo (io) <pair_airebo>`
|
* :doc:`rebo (io) <pair_airebo>`
|
||||||
* :doc:`resquared (go) <pair_resquared>`
|
* :doc:`resquared (go) <pair_resquared>`
|
||||||
* :doc:`saip/metal <pair_saip_metal>`
|
* :doc:`saip/metal (t) <pair_saip_metal>`
|
||||||
* :doc:`sdpd/taitwater/isothermal <pair_sdpd_taitwater_isothermal>`
|
* :doc:`sdpd/taitwater/isothermal <pair_sdpd_taitwater_isothermal>`
|
||||||
|
* :doc:`smatb <pair_smatb>`
|
||||||
|
* :doc:`smatb/single <pair_smatb>`
|
||||||
* :doc:`smd/hertz <pair_smd_hertz>`
|
* :doc:`smd/hertz <pair_smd_hertz>`
|
||||||
* :doc:`smd/tlsph <pair_smd_tlsph>`
|
* :doc:`smd/tlsph <pair_smd_tlsph>`
|
||||||
* :doc:`smd/tri_surface <pair_smd_triangulated_surface>`
|
* :doc:`smd/tri_surface <pair_smd_triangulated_surface>`
|
||||||
@ -265,7 +271,9 @@ OPT.
|
|||||||
* :doc:`spin/magelec <pair_spin_magelec>`
|
* :doc:`spin/magelec <pair_spin_magelec>`
|
||||||
* :doc:`spin/neel <pair_spin_neel>`
|
* :doc:`spin/neel <pair_spin_neel>`
|
||||||
* :doc:`srp <pair_srp>`
|
* :doc:`srp <pair_srp>`
|
||||||
|
* :doc:`srp/react <pair_srp>`
|
||||||
* :doc:`sw (giko) <pair_sw>`
|
* :doc:`sw (giko) <pair_sw>`
|
||||||
|
* :doc:`sw/angle/table <pair_sw_angle_table>`
|
||||||
* :doc:`sw/mod (o) <pair_sw>`
|
* :doc:`sw/mod (o) <pair_sw>`
|
||||||
* :doc:`table (gko) <pair_table>`
|
* :doc:`table (gko) <pair_table>`
|
||||||
* :doc:`table/rx (k) <pair_table_rx>`
|
* :doc:`table/rx (k) <pair_table_rx>`
|
||||||
@ -276,6 +284,7 @@ OPT.
|
|||||||
* :doc:`tersoff/table (o) <pair_tersoff>`
|
* :doc:`tersoff/table (o) <pair_tersoff>`
|
||||||
* :doc:`tersoff/zbl (gko) <pair_tersoff_zbl>`
|
* :doc:`tersoff/zbl (gko) <pair_tersoff_zbl>`
|
||||||
* :doc:`thole <pair_thole>`
|
* :doc:`thole <pair_thole>`
|
||||||
|
* :doc:`threebody/table <pair_threebody_table>`
|
||||||
* :doc:`tip4p/cut (o) <pair_coul>`
|
* :doc:`tip4p/cut (o) <pair_coul>`
|
||||||
* :doc:`tip4p/long (o) <pair_coul>`
|
* :doc:`tip4p/long (o) <pair_coul>`
|
||||||
* :doc:`tip4p/long/soft (o) <pair_fep_soft>`
|
* :doc:`tip4p/long/soft (o) <pair_fep_soft>`
|
||||||
|
|||||||
@ -77,18 +77,19 @@ LAMMPS:
|
|||||||
so that you do not have to define (or discard) a temporary variable,
|
so that you do not have to define (or discard) a temporary variable,
|
||||||
"X" in this case.
|
"X" in this case.
|
||||||
|
|
||||||
Additionally, the "immediate" variable expression may be followed by
|
Additionally, the entire "immediate" variable expression may be
|
||||||
a colon, followed by a C-style format string, e.g. ":%f" or ":%.10g".
|
followed by a colon, followed by a C-style format string,
|
||||||
The format string must be appropriate for a double-precision
|
e.g. ":%f" or ":%.10g". The format string must be appropriate for
|
||||||
floating-point value. The format string is used to output the result
|
a double-precision floating-point value. The format string is used
|
||||||
of the variable expression evaluation. If a format string is not
|
to output the result of the variable expression evaluation. If a
|
||||||
specified a high-precision "%.20g" is used as the default.
|
format string is not specified, a high-precision "%.20g" is used as
|
||||||
|
the default format.
|
||||||
|
|
||||||
This can be useful for formatting print output to a desired precision:
|
This can be useful for formatting print output to a desired precision:
|
||||||
|
|
||||||
.. code-block:: LAMMPS
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
print "Final energy per atom: $(pe/atoms:%10.3f) eV/atom"
|
print "Final energy per atom: $(v_ke_per_atom+v_pe_per_atom:%10.3f) eV/atom"
|
||||||
|
|
||||||
Note that neither the curly-bracket or immediate form of variables
|
Note that neither the curly-bracket or immediate form of variables
|
||||||
can contain nested $ characters for other variables to substitute
|
can contain nested $ characters for other variables to substitute
|
||||||
@ -122,14 +123,15 @@ LAMMPS:
|
|||||||
.. _six:
|
.. _six:
|
||||||
|
|
||||||
6. If you want text with spaces to be treated as a single argument, it
|
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
|
can be enclosed in either single (') or double (") or triple (""")
|
||||||
single argument enclosed in single or double quotes can span multiple
|
quotes. A long single argument enclosed in single or double quotes
|
||||||
lines if the "&" character is used, as described above. When the
|
can span multiple lines if the "&" character is used, as described
|
||||||
lines are concatenated together (and the "&" characters and line
|
in :ref:`1 <one>` above. When the lines are concatenated together
|
||||||
breaks removed), the text will become a single line. If you want
|
by LAMMPS (and the "&" characters and line breaks removed), the
|
||||||
multiple lines of an argument to retain their line breaks, the text
|
combined text will become a single line. If you want multiple lines
|
||||||
can be enclosed in triple quotes, in which case "&" characters are
|
of an argument to retain their line breaks, the text can be enclosed
|
||||||
not needed. For example:
|
in triple quotes, in which case "&" characters are not needed and do
|
||||||
|
not function as line continuation character. For example:
|
||||||
|
|
||||||
.. code-block:: LAMMPS
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
@ -143,8 +145,9 @@ LAMMPS:
|
|||||||
System temperature = $t
|
System temperature = $t
|
||||||
"""
|
"""
|
||||||
|
|
||||||
In each case, the single, double, or triple quotes are removed when
|
In each of these cases, the single, double, or triple quotes are
|
||||||
the single argument they enclose is stored internally.
|
removed and the enclosed text stored internally as a single
|
||||||
|
argument.
|
||||||
|
|
||||||
See the :doc:`dump modify format <dump_modify>`, :doc:`print
|
See the :doc:`dump modify format <dump_modify>`, :doc:`print
|
||||||
<print>`, :doc:`if <if>`, and :doc:`python <python>` commands for
|
<print>`, :doc:`if <if>`, and :doc:`python <python>` commands for
|
||||||
|
|||||||
@ -17,6 +17,7 @@ of time and requests from the LAMMPS user community.
|
|||||||
Developer_flow
|
Developer_flow
|
||||||
Developer_write
|
Developer_write
|
||||||
Developer_notes
|
Developer_notes
|
||||||
|
Developer_updating
|
||||||
Developer_plugins
|
Developer_plugins
|
||||||
Developer_unittest
|
Developer_unittest
|
||||||
Classes
|
Classes
|
||||||
|
|||||||
@ -68,7 +68,7 @@ Members of ``lammpsplugin_t``
|
|||||||
* - author
|
* - author
|
||||||
- String with the name and email of the author
|
- String with the name and email of the author
|
||||||
* - creator.v1
|
* - creator.v1
|
||||||
- Pointer to factory function for pair, bond, angle, dihedral, improper or command styles
|
- Pointer to factory function for pair, bond, angle, dihedral, improper, kspace, or command styles
|
||||||
* - creator.v2
|
* - creator.v2
|
||||||
- Pointer to factory function for compute, fix, or region styles
|
- Pointer to factory function for compute, fix, or region styles
|
||||||
* - handle
|
* - handle
|
||||||
@ -262,3 +262,41 @@ A plugin may be registered under an existing style name. In that case
|
|||||||
the plugin will override the existing code. This can be used to modify
|
the plugin will override the existing code. This can be used to modify
|
||||||
the behavior of existing styles or to debug new versions of them without
|
the behavior of existing styles or to debug new versions of them without
|
||||||
having to re-compile or re-install all of LAMMPS.
|
having to re-compile or re-install all of LAMMPS.
|
||||||
|
|
||||||
|
Compiling plugins
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Plugins need to be compiled with the same compilers and libraries
|
||||||
|
(e.g. MPI) and compilation settings (MPI on/off, OpenMP, integer sizes)
|
||||||
|
as the LAMMPS executable and library. Otherwise the plugin will likely
|
||||||
|
not load due to mismatches in the function signatures (LAMMPS is C++ so
|
||||||
|
scope, type, and number of arguments are encoded into the symbol names
|
||||||
|
and thus differences in them will lead to failed plugin load commands.
|
||||||
|
Compilation of the plugin can be managed via both, CMake or traditional
|
||||||
|
GNU makefiles. Some examples that can be used as a template are in the
|
||||||
|
``examples/plugins`` folder. The CMake script code has some small
|
||||||
|
adjustments to allow building the plugins for running unit tests with
|
||||||
|
them.
|
||||||
|
|
||||||
|
Another example that converts the KIM package into a plugin can be found
|
||||||
|
in the ``examples/kim/plugin`` folder. No changes to the sources of the
|
||||||
|
KIM package themselves are needed; only the plugin interface and loader
|
||||||
|
code needs to be added. This example only supports building with CMake,
|
||||||
|
but is probably a more typical example. To compile you need to run CMake
|
||||||
|
with -DLAMMPS_SOURCE_DIR=<path/to/lammps/src/folder>. Other
|
||||||
|
configuration setting are identical to those for compiling LAMMPS.
|
||||||
|
|
||||||
|
A second example for a plugin from a package is in the
|
||||||
|
``examples/PACKAGES/pace/plugin`` folder that will create a plugin from
|
||||||
|
the ML-PACE package. In this case the bulk of the code is in a static
|
||||||
|
external library that is being downloaded and compiled first and then
|
||||||
|
combined with the pair style wrapper and the plugin loader. This
|
||||||
|
example also contains a NSIS script that can be used to create an
|
||||||
|
Installer package for Windows (the mutual licensing terms of the
|
||||||
|
external library and LAMMPS conflict when distributing binaries, so the
|
||||||
|
ML-PACE package cannot be linked statically, but the LAMMPS headers
|
||||||
|
required to build the plugin are also available under a less restrictive
|
||||||
|
license). This will automatically set the required environment variable
|
||||||
|
and launching a (compatible) LAMMPS binary will load and register the
|
||||||
|
plugin and the ML-PACE package can then be used as it was linked into
|
||||||
|
LAMMPS.
|
||||||
|
|||||||
384
doc/src/Developer_updating.rst
Normal file
384
doc/src/Developer_updating.rst
Normal file
@ -0,0 +1,384 @@
|
|||||||
|
Notes for updating code written for older LAMMPS versions
|
||||||
|
---------------------------------------------------------
|
||||||
|
|
||||||
|
This section documents how C++ source files that are available *outside
|
||||||
|
of the LAMMPS source distribution* (e.g. in external USER packages or as
|
||||||
|
source files provided as a supplement to a publication) that are written
|
||||||
|
for an older version of LAMMPS and thus need to be updated to be
|
||||||
|
compatible with the current version of LAMMPS. Due to the active
|
||||||
|
development of LAMMPS it is likely to always be incomplete. Please
|
||||||
|
contact developer@lammps.org in case you run across an issue that is not
|
||||||
|
(yet) listed here. Please also review the latest information about the
|
||||||
|
LAMMPS :doc:`programming style conventions <Modify_style>`, especially
|
||||||
|
if you are considering to submit the updated version for inclusion into
|
||||||
|
the LAMMPS distribution.
|
||||||
|
|
||||||
|
Available topics in mostly chronological order are:
|
||||||
|
|
||||||
|
- `Setting flags in the constructor`_
|
||||||
|
- `Rename of pack/unpack_comm() to pack/unpack_forward_comm()`_
|
||||||
|
- `Use ev_init() to initialize variables derived from eflag and vflag`_
|
||||||
|
- `Use utils::numeric() functions instead of force->numeric()`_
|
||||||
|
- `Use utils::open_potential() function to open potential files`_
|
||||||
|
- `Simplify customized error messages`_
|
||||||
|
- `Use of "override" instead of "virtual"`_
|
||||||
|
- `Simplified and more compact neighbor list requests`_
|
||||||
|
- `Split of fix STORE into fix STORE/GLOBAL and fix STORE/PERATOM`_
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Setting flags in the constructor
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
As LAMMPS gains additional functionality, new flags may need to be set
|
||||||
|
in the constructor or a class to signal compatibility with such features.
|
||||||
|
Most of the time the defaults are chosen conservatively, but sometimes
|
||||||
|
the conservative choice is the uncommon choice, and then those settings
|
||||||
|
need to be made when updating code.
|
||||||
|
|
||||||
|
Pair styles:
|
||||||
|
|
||||||
|
- ``manybody_flag``: set to 1 if your pair style is not pair-wise additive
|
||||||
|
- ``restartinfo``: set to 0 if your pair style does not store data in restart files
|
||||||
|
|
||||||
|
|
||||||
|
Rename of pack/unpack_comm() to pack/unpack_forward_comm()
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. versionchanged:: 8Aug2014
|
||||||
|
|
||||||
|
In this change set the functions to pack data into communication buffers
|
||||||
|
and to unpack data from communication buffers for :doc:`forward
|
||||||
|
communications <Developer_comm_ops>` were renamed from ``pack_comm()``
|
||||||
|
and ``unpack_comm()`` to ``pack_forward_comm()`` and
|
||||||
|
``unpack_forward_comm()``, respectively. Also the meaning of the return
|
||||||
|
value of these functions was changed: rather than returning the number
|
||||||
|
of items per atom stored in the buffer, now the total number of items
|
||||||
|
added (or unpacked) needs to be returned. Here is an example from the
|
||||||
|
`PairEAM` class. Of course the member function declaration in corresponding
|
||||||
|
header file needs to be updated accordingly.
|
||||||
|
|
||||||
|
Old:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
int PairEAM::pack_comm(int n, int *list, double *buf, int pbc_flag, int *pbc)
|
||||||
|
{
|
||||||
|
int m = 0;
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
int j = list[i];
|
||||||
|
buf[m++] = fp[j];
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
New:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
int PairEAM::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc)
|
||||||
|
{
|
||||||
|
int m = 0;
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
int j = list[i];
|
||||||
|
buf[m++] = fp[j];
|
||||||
|
}
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Because the various "pack" and "unpack" functions are defined in the
|
||||||
|
respective base classes as dummy functions doing nothing, and because
|
||||||
|
of the the name mismatch the custom versions in the derived class
|
||||||
|
will no longer be called, there will be no compilation error when
|
||||||
|
this change is not applied. Only calculations will suddenly produce
|
||||||
|
incorrect results because the required forward communication calls
|
||||||
|
will cease to function correctly.
|
||||||
|
|
||||||
|
Use ev_init() to initialize variables derived from eflag and vflag
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. versionchanged:: 29Mar2019
|
||||||
|
|
||||||
|
There are several variables that need to be initialized based on
|
||||||
|
the values of the "eflag" and "vflag" variables and since sometimes
|
||||||
|
there are new bits added and new variables need to be set to 1 or 0.
|
||||||
|
To make this consistent, across all styles, there is now an inline
|
||||||
|
function ``ev_init(eflag, vflag)`` that makes those settings
|
||||||
|
consistently and calls either ``ev_setup()`` or ``ev_unset()``.
|
||||||
|
Example from a pair style:
|
||||||
|
|
||||||
|
Old:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
if (eflag || vflag) ev_setup(eflag, vflag);
|
||||||
|
else evflag = vflag_fdotr = eflag_global = eflag_atom = 0;
|
||||||
|
|
||||||
|
New:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
ev_init(eflag, vflag);
|
||||||
|
|
||||||
|
Not applying this change will not cause a compilation error, but
|
||||||
|
can lead to inconsistent behavior and incorrect tallying of
|
||||||
|
energy or virial.
|
||||||
|
|
||||||
|
Use utils::numeric() functions instead of force->numeric()
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. versionchanged:: 18Sep2020
|
||||||
|
|
||||||
|
The "numeric()" conversion functions (including "inumeric()",
|
||||||
|
"bnumeric()", and "tnumeric()") have been moved from the Force class to
|
||||||
|
the utils namespace. Also they take an additional argument that selects
|
||||||
|
whether the ``Error::all()`` or ``Error::one()`` function should be
|
||||||
|
called in case of an error. The former should be used when *all* MPI
|
||||||
|
processes call the conversion function and the latter *must* be used
|
||||||
|
when they are called from only one or a subset of the MPI processes.
|
||||||
|
|
||||||
|
Old:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
val = force->numeric(FLERR, arg[1]);
|
||||||
|
num = force->inumeric(FLERR, arg[2]);
|
||||||
|
|
||||||
|
New:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
val = utils::numeric(FLERR, true, arg[1], lmp);
|
||||||
|
num = utils::inumeric(FLERR, false, arg[2], lmp);
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
:cpp:func:`utils::numeric() <LAMMPS_NS::utils::numeric>`,
|
||||||
|
:cpp:func:`utils::inumeric() <LAMMPS_NS::utils::inumeric>`,
|
||||||
|
:cpp:func:`utils::bnumeric() <LAMMPS_NS::utils::bnumeric>`,
|
||||||
|
:cpp:func:`utils::tnumeric() <LAMMPS_NS::utils::tnumeric>`
|
||||||
|
|
||||||
|
Use utils::open_potential() function to open potential files
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. versionchanged:: 18Sep2020
|
||||||
|
|
||||||
|
The :cpp:func:`utils::open_potential()
|
||||||
|
<LAMMPS_NS::utils::open_potential>` function must be used to replace
|
||||||
|
calls to ``force->open_potential()`` and should be used to replace
|
||||||
|
``fopen()`` for opening potential files for reading. The custom
|
||||||
|
function does three additional steps compared to ``fopen()``: 1) it will
|
||||||
|
try to parse the ``UNITS:`` and ``DATE:`` metadata will stop with an
|
||||||
|
error on a units mismatch and will print the date info, if present, in
|
||||||
|
the log file; 2) for pair styles that support it, it will set up
|
||||||
|
possible automatic unit conversions based on the embedded unit
|
||||||
|
information and LAMMPS' current units setting; 3) it will not only try
|
||||||
|
to open a potential file at the given path, but will also search in the
|
||||||
|
folders listed in the ``LAMMPS_POTENTIALS`` environment variable. This
|
||||||
|
allows to keep potential files in a common location instead of having to
|
||||||
|
copy them around for simulations.
|
||||||
|
|
||||||
|
Old:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
fp = force->open_potential(filename);
|
||||||
|
fp = fopen(filename, "r");
|
||||||
|
|
||||||
|
New:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
fp = utils::open_potential(filename, lmp);
|
||||||
|
|
||||||
|
Simplify customized error messages
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. versionchanged:: 14May2021
|
||||||
|
|
||||||
|
Aided by features of the bundled {fmt} library, error messages now
|
||||||
|
can have a variable number of arguments and the string will be interpreted
|
||||||
|
as a {fmt} style format string so that custom error messages can be
|
||||||
|
easily customized without having to use temporary buffers and ``sprintf()``.
|
||||||
|
Example:
|
||||||
|
|
||||||
|
Old:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
if (fptr == NULL) {
|
||||||
|
char str[128];
|
||||||
|
sprintf(str,"Cannot open AEAM potential file %s",filename);
|
||||||
|
error->one(FLERR,str);
|
||||||
|
}
|
||||||
|
|
||||||
|
New:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
if (fptr == nullptr)
|
||||||
|
error->one(FLERR, "Cannot open AEAM potential file {}: {}", filename, utils::getsyserror());
|
||||||
|
|
||||||
|
Use of "override" instead of "virtual"
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. versionchanged:: 17Feb2022
|
||||||
|
|
||||||
|
Since LAMMPS requires C++11 we switched to use the "override" keyword
|
||||||
|
instead of "virtual" to indicate polymorphism in derived classes. This
|
||||||
|
allows the C++ compiler to better detect inconsistencies when an
|
||||||
|
override is intended or not. Please note that "override" has to be
|
||||||
|
added to **all** polymorph functions in derived classes and "virtual"
|
||||||
|
*only* to the function in the base class (or the destructor). Here is
|
||||||
|
an example from the ``FixWallReflect`` class:
|
||||||
|
|
||||||
|
Old:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
FixWallReflect(class LAMMPS *, int, char **);
|
||||||
|
virtual ~FixWallReflect();
|
||||||
|
int setmask();
|
||||||
|
void init();
|
||||||
|
void post_integrate();
|
||||||
|
|
||||||
|
New:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
FixWallReflect(class LAMMPS *, int, char **);
|
||||||
|
~FixWallReflect() override;
|
||||||
|
int setmask() override;
|
||||||
|
void init() override;
|
||||||
|
void post_integrate() override;
|
||||||
|
|
||||||
|
This change set will neither cause a compilation failure, nor will it
|
||||||
|
change functionality, but if you plan to submit the updated code for
|
||||||
|
inclusion into the LAMMPS distribution, it will be requested for achieve
|
||||||
|
a consistent :doc:`programming style <Modify_style>`.
|
||||||
|
|
||||||
|
Simplified function names for forward and reverse communication
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. versionchanged:: 24Mar2022
|
||||||
|
|
||||||
|
Rather then using the function name to distinguish between the different
|
||||||
|
forward and reverse communication functions for styles, LAMMPS now uses
|
||||||
|
the type of the "this" pointer argument.
|
||||||
|
|
||||||
|
Old:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
comm->forward_comm_pair(this);
|
||||||
|
comm->forward_comm_fix(this);
|
||||||
|
comm->forward_comm_compute(this);
|
||||||
|
comm->forward_comm_dump(this);
|
||||||
|
comm->reverse_comm_pair(this);
|
||||||
|
comm->reverse_comm_fix(this);
|
||||||
|
comm->reverse_comm_compute(this);
|
||||||
|
comm->reverse_comm_dump(this);
|
||||||
|
|
||||||
|
New:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
comm->forward_comm(this);
|
||||||
|
comm->reverse_comm(this);
|
||||||
|
|
||||||
|
This change is **required** or else the code will not compile.
|
||||||
|
|
||||||
|
Simplified and more compact neighbor list requests
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. versionchanged:: 24Mar2022
|
||||||
|
|
||||||
|
This change set reduces the amount of code required to request a
|
||||||
|
neighbor list. It enforces consistency and no longer requires to change
|
||||||
|
internal data of the request. More information on neighbor list
|
||||||
|
requests can be :doc:`found here <Developer_notes>`. Example from the
|
||||||
|
``ComputeRDF`` class:
|
||||||
|
|
||||||
|
Old:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
int irequest = neighbor->request(this,instance_me);
|
||||||
|
neighbor->requests[irequest]->pair = 0;
|
||||||
|
neighbor->requests[irequest]->compute = 1;
|
||||||
|
neighbor->requests[irequest]->occasional = 1;
|
||||||
|
if (cutflag) {
|
||||||
|
neighbor->requests[irequest]->cut = 1;
|
||||||
|
neighbor->requests[irequest]->cutoff = mycutneigh;
|
||||||
|
}
|
||||||
|
|
||||||
|
New:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
auto req = neighbor->add_request(this, NeighConst::REQ_OCCASIONAL);
|
||||||
|
if (cutflag) req->set_cutoff(mycutneigh);
|
||||||
|
|
||||||
|
Public access to the ``NeighRequest`` class data members has been
|
||||||
|
removed so this update is **required** to avoid compilation failure.
|
||||||
|
|
||||||
|
Split of fix STORE into fix STORE/GLOBAL and fix STORE/PERATOM
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. versionchanged:: TBD
|
||||||
|
|
||||||
|
This change splits the GLOBAL and PERATOM modes of fix STORE into two
|
||||||
|
separate fixes STORE/GLOBAL and STORE/PERATOM. There was very little
|
||||||
|
shared code between the two fix STORE modes and the two different code
|
||||||
|
paths had to be prefixed with if statements. Furthermore, some flags
|
||||||
|
were used differently in the two modes leading to confusion. Splitting
|
||||||
|
the code into two fix styles, makes it more easily maintainable. Since
|
||||||
|
these are internal fixes, there is no user visible change.
|
||||||
|
|
||||||
|
Old:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
#include "fix_store.h"
|
||||||
|
|
||||||
|
FixStore *fix = dynamic_cast<FixStore *>(
|
||||||
|
modify->add_fix(fmt::format("{} {} STORE peratom 1 13",id_pole,group->names[0]));
|
||||||
|
|
||||||
|
FixStore *fix = dynamic_cast<FixStore *>(modify->get_fix_by_id(id_pole));
|
||||||
|
|
||||||
|
New:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
#include "fix_store_peratom.h"
|
||||||
|
|
||||||
|
FixStorePeratom *fix = dynamic_cast<FixStorePeratom *>(
|
||||||
|
modify->add_fix(fmt::format("{} {} STORE/PERATOM 1 13",id_pole,group->names[0]));
|
||||||
|
|
||||||
|
FixStorePeratom *fix = dynamic_cast<FixStorePeratom *>(modify->get_fix_by_id(id_pole));
|
||||||
|
|
||||||
|
Old:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
#include "fix_store.h"
|
||||||
|
|
||||||
|
FixStore *fix = dynamic_cast<FixStore *>(
|
||||||
|
modify->add_fix(fmt::format("{} {} STORE global 1 1",id_fix,group->names[igroup]));
|
||||||
|
|
||||||
|
FixStore *fix = dynamic_cast<FixStore *>(modify->get_fix_by_id(id_fix));
|
||||||
|
|
||||||
|
New:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
#include "fix_store_global.h"
|
||||||
|
|
||||||
|
FixStoreGlobal *fix = dynamic_cast<FixStoreGlobal *>(
|
||||||
|
modify->add_fix(fmt::format("{} {} STORE/GLOBAL 1 1",id_fix,group->names[igroup]));
|
||||||
|
|
||||||
|
FixStoreGlobal *fix = dynamic_cast<FixStoreGlobal *>(modify->get_fix_by_id(id_fix));
|
||||||
|
|
||||||
|
This change is **required** or else the code will not compile.
|
||||||
@ -133,6 +133,9 @@ and parsing files or arguments.
|
|||||||
.. doxygenfunction:: trim_comment
|
.. doxygenfunction:: trim_comment
|
||||||
:project: progguide
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: star_subst
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
.. doxygenfunction:: has_utf8
|
.. doxygenfunction:: has_utf8
|
||||||
:project: progguide
|
:project: progguide
|
||||||
|
|
||||||
@ -151,6 +154,9 @@ and parsing files or arguments.
|
|||||||
.. doxygenfunction:: trim_and_count_words
|
.. doxygenfunction:: trim_and_count_words
|
||||||
:project: progguide
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: join_words
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
.. doxygenfunction:: split_words
|
.. doxygenfunction:: split_words
|
||||||
:project: progguide
|
:project: progguide
|
||||||
|
|
||||||
@ -202,12 +208,18 @@ Argument processing
|
|||||||
Convenience functions
|
Convenience functions
|
||||||
^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
.. doxygenfunction:: logmesg(LAMMPS *lmp, const S &format, Args&&... args)
|
.. doxygenfunction:: logmesg(LAMMPS *lmp, const std::string &format, Args&&... args)
|
||||||
:project: progguide
|
:project: progguide
|
||||||
|
|
||||||
.. doxygenfunction:: logmesg(LAMMPS *lmp, const std::string &mesg)
|
.. doxygenfunction:: logmesg(LAMMPS *lmp, const std::string &mesg)
|
||||||
:project: progguide
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: errorurl
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: missing_cmd_args
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
.. doxygenfunction:: flush_buffers(LAMMPS *lmp)
|
.. doxygenfunction:: flush_buffers(LAMMPS *lmp)
|
||||||
:project: progguide
|
:project: progguide
|
||||||
|
|
||||||
@ -237,6 +249,44 @@ Customized standard functions
|
|||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
Special Math functions
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
The ``MathSpecial`` namespace implements a selection of custom and optimized
|
||||||
|
mathematical functions for a variety of applications.
|
||||||
|
|
||||||
|
.. doxygenfunction:: factorial
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: exp2_x86
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: fm_exp
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: my_erfcx
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: expmsq
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: square
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: cube
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: powsign
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: powint
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: powsinxx
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
Tokenizer classes
|
Tokenizer classes
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,7 @@ them.
|
|||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
Errors_common
|
Errors_common
|
||||||
|
Errors_details
|
||||||
Errors_bugs
|
Errors_bugs
|
||||||
Errors_debug
|
Errors_debug
|
||||||
Errors_messages
|
Errors_messages
|
||||||
|
|||||||
@ -17,9 +17,8 @@ the steps outlined below:
|
|||||||
if your issue has already been reported and if it is still open.
|
if your issue has already been reported and if it is still open.
|
||||||
* Check the `GitHub Pull Requests page <https://github.com/lammps/lammps/pulls>`_
|
* Check the `GitHub Pull Requests page <https://github.com/lammps/lammps/pulls>`_
|
||||||
to see if there is already a fix for your bug pending.
|
to see if there is already a fix for your bug pending.
|
||||||
* Check the `mailing list archives <https://www.lammps.org/mail.html>`_ or
|
* Check the `LAMMPS forum at MatSci <https://matsci.org/lammps/>`_
|
||||||
the `LAMMPS forum <https://www.lammps.org/forum.html>`_ to see if the
|
to see if the issue has been discussed before.
|
||||||
issue has been discussed before.
|
|
||||||
|
|
||||||
If none of these steps yields any useful information, please file a new
|
If none of these steps yields any useful information, please file a new
|
||||||
bug report on the `GitHub Issue page <https://github.com/lammps/lammps/issues>`_.
|
bug report on the `GitHub Issue page <https://github.com/lammps/lammps/issues>`_.
|
||||||
@ -38,12 +37,9 @@ generate this restart from a data file or a simple additional input.
|
|||||||
This input deck can be used with tools like a debugger or `valgrind
|
This input deck can be used with tools like a debugger or `valgrind
|
||||||
<https://valgrind.org>`_ to further :doc:`debug the crash <Errors_debug>`.
|
<https://valgrind.org>`_ to further :doc:`debug the crash <Errors_debug>`.
|
||||||
|
|
||||||
You may also send an email to the LAMMPS mailing list at
|
You may also post a message in the `development category of the LAMMPS
|
||||||
"lammps-users at lists.sourceforge.net" describing the problem with the
|
forum at MatSci <https://matsci.org/c/lammps/lammps-development/>`_
|
||||||
same kind of information. The mailing list can provide a faster response,
|
describing the problem with the same kind of information. The forum can
|
||||||
especially if the bug reported is actually expected behavior. But because
|
provide a faster response, especially if the bug reported is actually
|
||||||
of the high volume of the mailing list, it can happen that your e-mail
|
expected behavior or other LAMMPS users have come across it before.
|
||||||
is overlooked and then forgotten. Issues on GitHub have to be explicitly
|
|
||||||
closed, so that will *guarantee* that at least one LAMMPS developer will
|
|
||||||
have looked at it.
|
|
||||||
|
|
||||||
|
|||||||
27
doc/src/Errors_details.rst
Normal file
27
doc/src/Errors_details.rst
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
Error and warning details
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Many errors or warnings are self-explanatory and thus straightforward to
|
||||||
|
resolve. However, there are also cases, where there is no single cause
|
||||||
|
and explanation, where LAMMPS can only detect symptoms of an error but
|
||||||
|
not the exact cause, or where the explanation needs to be more detailed than
|
||||||
|
what can be fit into a message printed by the program. The following are
|
||||||
|
discussions of such cases.
|
||||||
|
|
||||||
|
.. _err0001:
|
||||||
|
|
||||||
|
Unknown identifier in data file
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
This error happens when LAMMPS encounters a line of text in an unexpected format
|
||||||
|
while reading a data file. This is most commonly cause by inconsistent header and
|
||||||
|
section data. The header section informs LAMMPS how many entries or lines are expected in the
|
||||||
|
various sections (like Atoms, Masses, Pair Coeffs, *etc.*\ ) of the data file.
|
||||||
|
If there is a mismatch, LAMMPS will either keep reading beyond the end of a section
|
||||||
|
or stop reading before the section has ended.
|
||||||
|
|
||||||
|
Such a mismatch can happen unexpectedly when the first line of the data
|
||||||
|
is *not* a comment as required by the format. That would result in
|
||||||
|
LAMMPS expecting, for instance, 0 atoms because the "atoms" header line
|
||||||
|
is treated as a comment.
|
||||||
|
|
||||||
@ -476,65 +476,6 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
|||||||
*Bonds defined but no bond types*
|
*Bonds defined but no bond types*
|
||||||
The data file header lists bonds but no bond types.
|
The data file header lists bonds but no bond types.
|
||||||
|
|
||||||
*Bond/react: Cannot use fix bond/react with non-molecular systems*
|
|
||||||
Only systems with bonds that can be changed can be used. Atom_style
|
|
||||||
template does not qualify.
|
|
||||||
|
|
||||||
*Bond/react: Invalid template atom ID in map file*
|
|
||||||
Atom IDs in molecule templates range from 1 to the number of atoms in the template.
|
|
||||||
|
|
||||||
*Bond/react: Rmax cutoff is longer than pairwise cutoff*
|
|
||||||
This is not allowed because bond creation is done using the pairwise
|
|
||||||
neighbor list.
|
|
||||||
|
|
||||||
*Bond/react: Molecule template ID for fix bond/react does not exist*
|
|
||||||
A valid molecule template must have been created with the molecule
|
|
||||||
command.
|
|
||||||
|
|
||||||
*Bond/react: Reaction templates must contain the same number of atoms*
|
|
||||||
There should be a one-to-one correspondence between atoms in the
|
|
||||||
pre-reacted and post-reacted templates, as specified by the map file.
|
|
||||||
|
|
||||||
*Bond/react: Unknown section in map file*
|
|
||||||
Please ensure reaction map files are properly formatted.
|
|
||||||
|
|
||||||
*Bond/react: Atom/Bond type affected by reaction too close to template edge*
|
|
||||||
This means an atom which changes type or connectivity during the
|
|
||||||
reaction is too close to an 'edge' atom defined in the map
|
|
||||||
file. This could cause incorrect assignment of bonds, angle, etc.
|
|
||||||
Generally, this means you must include more atoms in your templates,
|
|
||||||
such that there are at least two atoms between each atom involved in
|
|
||||||
the reaction and an edge atom.
|
|
||||||
|
|
||||||
*Bond/react: Fix bond/react needs ghost atoms from farther away*
|
|
||||||
This is because a processor needs to map the entire unreacted
|
|
||||||
molecule template onto simulation atoms it knows about. The
|
|
||||||
comm_modify cutoff command can be used to extend the communication
|
|
||||||
range.
|
|
||||||
|
|
||||||
*Bond/react: A deleted atom cannot remain bonded to an atom that is not deleted*
|
|
||||||
Self-explanatory.
|
|
||||||
|
|
||||||
*Bond/react: First neighbors of chiral atoms must be of mutually different types*
|
|
||||||
Self-explanatory.
|
|
||||||
|
|
||||||
*Bond/react: Chiral atoms must have exactly four first neighbors*
|
|
||||||
Self-explanatory.
|
|
||||||
|
|
||||||
*Bond/react: Molecule template 'Coords' section required for chiralIDs keyword*
|
|
||||||
The coordinates of atoms in the pre-reacted template are used to determine
|
|
||||||
chirality.
|
|
||||||
|
|
||||||
*Bond/react special bond generation overflow*
|
|
||||||
The number of special bonds per-atom created by a reaction exceeds the
|
|
||||||
system setting. See the read_data or create_box command for how to
|
|
||||||
specify this value.
|
|
||||||
|
|
||||||
*Bond/react topology/atom exceed system topology/atom*
|
|
||||||
The number of bonds, angles etc per-atom created by a reaction exceeds
|
|
||||||
the system setting. See the read_data or create_box command for how to
|
|
||||||
specify this value.
|
|
||||||
|
|
||||||
*Both restart files must use % or neither*
|
*Both restart files must use % or neither*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
@ -1291,7 +1232,7 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
|||||||
*Cannot use chosen neighbor list style with lj/gromacs/kk*
|
*Cannot use chosen neighbor list style with lj/gromacs/kk*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
*Cannot use chosen neighbor list style with lj/sdk/kk*
|
*Cannot use chosen neighbor list style with lj/spica/kk*
|
||||||
That style is not supported by Kokkos.
|
That style is not supported by Kokkos.
|
||||||
|
|
||||||
*Cannot use chosen neighbor list style with pair eam/kk*
|
*Cannot use chosen neighbor list style with pair eam/kk*
|
||||||
@ -1659,10 +1600,10 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
|||||||
*Cannot use newton pair with lj/gromacs/gpu pair style*
|
*Cannot use newton pair with lj/gromacs/gpu pair style*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
*Cannot use newton pair with lj/sdk/coul/long/gpu pair style*
|
*Cannot use newton pair with lj/spica/coul/long/gpu pair style*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
*Cannot use newton pair with lj/sdk/gpu pair style*
|
*Cannot use newton pair with lj/spica/gpu pair style*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
*Cannot use newton pair with lj96/cut/gpu pair style*
|
*Cannot use newton pair with lj96/cut/gpu pair style*
|
||||||
@ -3521,6 +3462,65 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
|||||||
acquire needed info, The comm_modify cutoff command can be used to
|
acquire needed info, The comm_modify cutoff command can be used to
|
||||||
extend the communication range.
|
extend the communication range.
|
||||||
|
|
||||||
|
*Fix bond/react: Cannot use fix bond/react with non-molecular systems*
|
||||||
|
Only systems with bonds that can be changed can be used. Atom_style
|
||||||
|
template does not qualify.
|
||||||
|
|
||||||
|
*Fix bond/react: Invalid template atom ID in map file*
|
||||||
|
Atom IDs in molecule templates range from 1 to the number of atoms in the template.
|
||||||
|
|
||||||
|
*Fix bond/react: Rmax cutoff is longer than pairwise cutoff*
|
||||||
|
This is not allowed because bond creation is done using the pairwise
|
||||||
|
neighbor list.
|
||||||
|
|
||||||
|
*Fix bond/react: Molecule template ID for fix bond/react does not exist*
|
||||||
|
A valid molecule template must have been created with the molecule
|
||||||
|
command.
|
||||||
|
|
||||||
|
*Fix bond/react: Reaction templates must contain the same number of atoms*
|
||||||
|
There should be a one-to-one correspondence between atoms in the
|
||||||
|
pre-reacted and post-reacted templates, as specified by the map file.
|
||||||
|
|
||||||
|
*Fix bond/react: Unknown section in map file*
|
||||||
|
Please ensure reaction map files are properly formatted.
|
||||||
|
|
||||||
|
*Fix bond/react: Atom/Bond type affected by reaction too close to template edge*
|
||||||
|
This means an atom which changes type or connectivity during the
|
||||||
|
reaction is too close to an 'edge' atom defined in the map
|
||||||
|
file. This could cause incorrect assignment of bonds, angle, etc.
|
||||||
|
Generally, this means you must include more atoms in your templates,
|
||||||
|
such that there are at least two atoms between each atom involved in
|
||||||
|
the reaction and an edge atom.
|
||||||
|
|
||||||
|
*Fix bond/react: Fix bond/react needs ghost atoms from farther away*
|
||||||
|
This is because a processor needs to map the entire unreacted
|
||||||
|
molecule template onto simulation atoms it knows about. The
|
||||||
|
comm_modify cutoff command can be used to extend the communication
|
||||||
|
range.
|
||||||
|
|
||||||
|
*Fix bond/react: A deleted atom cannot remain bonded to an atom that is not deleted*
|
||||||
|
Self-explanatory.
|
||||||
|
|
||||||
|
*Fix bond/react: First neighbors of chiral atoms must be of mutually different types*
|
||||||
|
Self-explanatory.
|
||||||
|
|
||||||
|
*Fix bond/react: Chiral atoms must have exactly four first neighbors*
|
||||||
|
Self-explanatory.
|
||||||
|
|
||||||
|
*Fix bond/react: Molecule template 'Coords' section required for chiralIDs keyword*
|
||||||
|
The coordinates of atoms in the pre-reacted template are used to determine
|
||||||
|
chirality.
|
||||||
|
|
||||||
|
*Fix bond/react special bond generation overflow*
|
||||||
|
The number of special bonds per-atom created by a reaction exceeds the
|
||||||
|
system setting. See the read_data or create_box command for how to
|
||||||
|
specify this value.
|
||||||
|
|
||||||
|
*Fix bond/react topology/atom exceed system topology/atom*
|
||||||
|
The number of bonds, angles etc per-atom created by a reaction exceeds
|
||||||
|
the system setting. See the read_data or create_box command for how to
|
||||||
|
specify this value.
|
||||||
|
|
||||||
*Fix bond/swap cannot use dihedral or improper styles*
|
*Fix bond/swap cannot use dihedral or improper styles*
|
||||||
These styles cannot be defined when using this fix.
|
These styles cannot be defined when using this fix.
|
||||||
|
|
||||||
@ -6810,7 +6810,7 @@ keyword to allow for additional bonds to be formed
|
|||||||
This is because the computation of constraint forces within a water
|
This is because the computation of constraint forces within a water
|
||||||
molecule adds forces to atoms owned by other processors.
|
molecule adds forces to atoms owned by other processors.
|
||||||
|
|
||||||
*Pair style lj/sdk/coul/long/gpu requires atom attribute q*
|
*Pair style lj/spica/coul/long/gpu requires atom attribute q*
|
||||||
The atom style defined does not have this attribute.
|
The atom style defined does not have this attribute.
|
||||||
|
|
||||||
*Pair style nb3b/harmonic requires atom IDs*
|
*Pair style nb3b/harmonic requires atom IDs*
|
||||||
|
|||||||
@ -68,14 +68,6 @@ Doc page with :doc:`ERROR messages <Errors_messages>`
|
|||||||
length, multiplying by the number of bonds in the interaction (e.g. 3
|
length, multiplying by the number of bonds in the interaction (e.g. 3
|
||||||
for a dihedral) and adding a small amount of stretch.
|
for a dihedral) and adding a small amount of stretch.
|
||||||
|
|
||||||
*Bond/react: Atom affected by reaction too close to template edge*
|
|
||||||
This means an atom which changes type or connectivity during the
|
|
||||||
reaction is too close to an 'edge' atom defined in the superimpose
|
|
||||||
file. This could cause incorrect assignment of bonds, angle, etc.
|
|
||||||
Generally, this means you must include more atoms in your templates,
|
|
||||||
such that there are at least two atoms between each atom involved in
|
|
||||||
the reaction and an edge atom.
|
|
||||||
|
|
||||||
*Both groups in compute group/group have a net charge; the Kspace boundary correction to energy will be non-zero*
|
*Both groups in compute group/group have a net charge; the Kspace boundary correction to energy will be non-zero*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
@ -206,12 +198,20 @@ Doc page with :doc:`ERROR messages <Errors_messages>`
|
|||||||
*Fix SRD walls overlap but fix srd overlap not set*
|
*Fix SRD walls overlap but fix srd overlap not set*
|
||||||
You likely want to set this in your input script.
|
You likely want to set this in your input script.
|
||||||
|
|
||||||
* Fix bond/create is used multiple times or with fix bond/break - may not work as expected*
|
*Fix bond/create is used multiple times or with fix bond/break - may not work as expected*
|
||||||
When using fix bond/create multiple times or in combination with
|
When using fix bond/create multiple times or in combination with
|
||||||
fix bond/break, the individual fix instances do not share information
|
fix bond/break, the individual fix instances do not share information
|
||||||
about changes they made at the same time step and thus it may result
|
about changes they made at the same time step and thus it may result
|
||||||
in unexpected behavior.
|
in unexpected behavior.
|
||||||
|
|
||||||
|
*Fix bond/react: Atom affected by reaction too close to template edge*
|
||||||
|
This means an atom which changes type or connectivity during the
|
||||||
|
reaction is too close to an 'edge' atom defined in the superimpose
|
||||||
|
file. This could cause incorrect assignment of bonds, angle, etc.
|
||||||
|
Generally, this means you must include more atoms in your templates,
|
||||||
|
such that there are at least two atoms between each atom involved in
|
||||||
|
the reaction and an edge atom.
|
||||||
|
|
||||||
*Fix bond/swap will ignore defined angles*
|
*Fix bond/swap will ignore defined angles*
|
||||||
See the page for fix bond/swap for more info on this
|
See the page for fix bond/swap for more info on this
|
||||||
restriction.
|
restriction.
|
||||||
@ -470,6 +470,12 @@ This will most likely cause errors in kinetic fluctuations.
|
|||||||
*More than one compute sna/atom*
|
*More than one compute sna/atom*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
|
*More than one compute sna/grid*
|
||||||
|
Self-explanatory.
|
||||||
|
|
||||||
|
*More than one compute sna/grid/local*
|
||||||
|
Self-explanatory.
|
||||||
|
|
||||||
*More than one compute snad/atom*
|
*More than one compute snad/atom*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
@ -804,4 +810,3 @@ This will most likely cause errors in kinetic fluctuations.
|
|||||||
|
|
||||||
*Using pair tail corrections with pair_modify compute no*
|
*Using pair tail corrections with pair_modify compute no*
|
||||||
The tail corrections will thus not be computed.
|
The tail corrections will thus not be computed.
|
||||||
|
|
||||||
|
|||||||
@ -54,6 +54,8 @@ Lowercase directories
|
|||||||
+-------------+------------------------------------------------------------------+
|
+-------------+------------------------------------------------------------------+
|
||||||
| body | body particles, 2d system |
|
| body | body particles, 2d system |
|
||||||
+-------------+------------------------------------------------------------------+
|
+-------------+------------------------------------------------------------------+
|
||||||
|
| bpm | BPM simulations of pouring elastic grains and plate impact |
|
||||||
|
+-------------+------------------------------------------------------------------+
|
||||||
| cmap | CMAP 5-body contributions to CHARMM force field |
|
| cmap | CMAP 5-body contributions to CHARMM force field |
|
||||||
+-------------+------------------------------------------------------------------+
|
+-------------+------------------------------------------------------------------+
|
||||||
| colloid | big colloid particles in a small particle solvent, 2d system |
|
| colloid | big colloid particles in a small particle solvent, 2d system |
|
||||||
@ -94,12 +96,12 @@ Lowercase directories
|
|||||||
+-------------+------------------------------------------------------------------+
|
+-------------+------------------------------------------------------------------+
|
||||||
| latte | examples for using fix latte for DFTB via the LATTE library |
|
| latte | examples for using fix latte for DFTB via the LATTE library |
|
||||||
+-------------+------------------------------------------------------------------+
|
+-------------+------------------------------------------------------------------+
|
||||||
|
| mdi | use of the MDI package and MolSSI MDI code coupling library |
|
||||||
|
+-------------+------------------------------------------------------------------+
|
||||||
| meam | MEAM test for SiC and shear (same as shear examples) |
|
| meam | MEAM test for SiC and shear (same as shear examples) |
|
||||||
+-------------+------------------------------------------------------------------+
|
+-------------+------------------------------------------------------------------+
|
||||||
| melt | rapid melt of 3d LJ system |
|
| melt | rapid melt of 3d LJ system |
|
||||||
+-------------+------------------------------------------------------------------+
|
+-------------+------------------------------------------------------------------+
|
||||||
| message | demos for LAMMPS client/server coupling with the MESSAGE package |
|
|
||||||
+-------------+------------------------------------------------------------------+
|
|
||||||
| micelle | self-assembly of small lipid-like molecules into 2d bilayers |
|
| micelle | self-assembly of small lipid-like molecules into 2d bilayers |
|
||||||
+-------------+------------------------------------------------------------------+
|
+-------------+------------------------------------------------------------------+
|
||||||
| min | energy minimization of 2d LJ melt |
|
| min | energy minimization of 2d LJ melt |
|
||||||
|
|||||||
@ -38,11 +38,11 @@ found together with equivalent examples in C and C++ in the
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
A contributed (and complete!) Fortran interface that more
|
A contributed (and more complete!) Fortran interface that more
|
||||||
closely resembles the C-library interface is available
|
closely resembles the C-library interface is available in the
|
||||||
in the ``examples/COUPLE/fortran2`` folder. Please see the
|
``examples/COUPLE/fortran2`` folder. Please see the ``README`` file
|
||||||
``README`` file in that folder for more information about it
|
in that folder for more information about it and how to contact its
|
||||||
and how to contact its author and maintainer.
|
author and maintainer.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
@ -65,8 +65,9 @@ the optional logical argument set to ``.true.``. Here is a simple example:
|
|||||||
|
|
||||||
PROGRAM testlib
|
PROGRAM testlib
|
||||||
USE LIBLAMMPS ! include the LAMMPS library interface
|
USE LIBLAMMPS ! include the LAMMPS library interface
|
||||||
|
IMPLICIT NONE
|
||||||
TYPE(lammps) :: lmp ! derived type to hold LAMMPS instance
|
TYPE(lammps) :: lmp ! derived type to hold LAMMPS instance
|
||||||
CHARACTER(len=*), DIMENSION(*), PARAMETER :: args = &
|
CHARACTER(len=*), PARAMETER :: args(3) = &
|
||||||
[ CHARACTER(len=12) :: 'liblammps', '-log', 'none' ]
|
[ CHARACTER(len=12) :: 'liblammps', '-log', 'none' ]
|
||||||
|
|
||||||
! create a LAMMPS instance (and initialize MPI)
|
! create a LAMMPS instance (and initialize MPI)
|
||||||
@ -78,6 +79,41 @@ the optional logical argument set to ``.true.``. Here is a simple example:
|
|||||||
|
|
||||||
END PROGRAM testlib
|
END PROGRAM testlib
|
||||||
|
|
||||||
|
It is also possible to pass command line flags from Fortran to C/C++ and
|
||||||
|
thus make the resulting executable behave similar to the standalone
|
||||||
|
executable (it will ignore the `-in/-i` flag, though). This allows to
|
||||||
|
use the command line to configure accelerator and suffix settings,
|
||||||
|
configure screen and logfile output, or to set index style variables
|
||||||
|
from the command line and more. Here is a correspondingly adapted
|
||||||
|
version of the previous example:
|
||||||
|
|
||||||
|
.. code-block:: fortran
|
||||||
|
|
||||||
|
PROGRAM testlib2
|
||||||
|
USE LIBLAMMPS ! include the LAMMPS library interface
|
||||||
|
IMPLICIT NONE
|
||||||
|
TYPE(lammps) :: lmp ! derived type to hold LAMMPS instance
|
||||||
|
CHARACTER(len=128), ALLOCATABLE :: command_args(:)
|
||||||
|
INTEGER :: i, argc
|
||||||
|
|
||||||
|
! copy command line flags to `command_args()`
|
||||||
|
argc = COMMAND_ARGUMENT_COUNT()
|
||||||
|
ALLOCATE(command_args(0:argc))
|
||||||
|
DO i=0, argc
|
||||||
|
CALL GET_COMMAND_ARGUMENT(i, command_args(i))
|
||||||
|
END DO
|
||||||
|
|
||||||
|
! create a LAMMPS instance (and initialize MPI)
|
||||||
|
lmp = lammps(command_args)
|
||||||
|
! get and print numerical version code
|
||||||
|
PRINT*, 'Program name: ', command_args(0)
|
||||||
|
PRINT*, 'LAMMPS Version: ', lmp%version()
|
||||||
|
! delete LAMMPS instance (and shuts down MPI)
|
||||||
|
CALL lmp%close(.TRUE.)
|
||||||
|
DEALLOCATE(command_args)
|
||||||
|
|
||||||
|
END PROGRAM testlib2
|
||||||
|
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
Executing LAMMPS commands
|
Executing LAMMPS commands
|
||||||
@ -102,7 +138,7 @@ Below is a small demonstration of the uses of the different functions:
|
|||||||
USE LIBLAMMPS
|
USE LIBLAMMPS
|
||||||
TYPE(lammps) :: lmp
|
TYPE(lammps) :: lmp
|
||||||
CHARACTER(len=512) :: cmds
|
CHARACTER(len=512) :: cmds
|
||||||
CHARACTER(len=40),ALLOCATABLE :: cmdlist(:)
|
CHARACTER(len=40), ALLOCATABLE :: cmdlist(:)
|
||||||
CHARACTER(len=10) :: trimmed
|
CHARACTER(len=10) :: trimmed
|
||||||
INTEGER :: i
|
INTEGER :: i
|
||||||
|
|
||||||
@ -111,10 +147,10 @@ Below is a small demonstration of the uses of the different functions:
|
|||||||
CALL lmp%command('variable zpos index 1.0')
|
CALL lmp%command('variable zpos index 1.0')
|
||||||
! define 10 groups of 10 atoms each
|
! define 10 groups of 10 atoms each
|
||||||
ALLOCATE(cmdlist(10))
|
ALLOCATE(cmdlist(10))
|
||||||
DO i=1,10
|
DO i=1, 10
|
||||||
WRITE(trimmed,'(I10)') 10*i
|
WRITE(trimmed,'(I10)') 10*i
|
||||||
WRITE(cmdlist(i),'(A,I1,A,I10,A,A)') &
|
WRITE(cmdlist(i),'(A,I1,A,I10,A,A)') &
|
||||||
'group g',i-1,' id ',10*(i-1)+1,':',ADJUSTL(trimmed)
|
'group g', i-1, ' id ', 10*(i-1)+1, ':', ADJUSTL(trimmed)
|
||||||
END DO
|
END DO
|
||||||
CALL lmp%commands_list(cmdlist)
|
CALL lmp%commands_list(cmdlist)
|
||||||
! run multiple commands from multi-line string
|
! run multiple commands from multi-line string
|
||||||
@ -123,7 +159,7 @@ Below is a small demonstration of the uses of the different functions:
|
|||||||
'create_box 1 box' // NEW_LINE('A') // &
|
'create_box 1 box' // NEW_LINE('A') // &
|
||||||
'create_atoms 1 single 1.0 1.0 ${zpos}'
|
'create_atoms 1 single 1.0 1.0 ${zpos}'
|
||||||
CALL lmp%commands_string(cmds)
|
CALL lmp%commands_string(cmds)
|
||||||
CALL lmp%close()
|
CALL lmp%close(.TRUE.)
|
||||||
|
|
||||||
END PROGRAM testcmd
|
END PROGRAM testcmd
|
||||||
|
|
||||||
@ -137,9 +173,9 @@ of the contents of the ``LIBLAMMPS`` Fortran interface to LAMMPS.
|
|||||||
|
|
||||||
.. f:type:: lammps
|
.. f:type:: lammps
|
||||||
|
|
||||||
Derived type that is the general class of the Fortran interface.
|
Derived type that is the general class of the Fortran interface. It
|
||||||
It holds a reference to the :cpp:class:`LAMMPS <LAMMPS_NS::LAMMPS>` class instance
|
holds a reference to the :cpp:class:`LAMMPS <LAMMPS_NS::LAMMPS>`
|
||||||
that any of the included calls are forwarded to.
|
class instance that any of the included calls are forwarded to.
|
||||||
|
|
||||||
:f c_ptr handle: reference to the LAMMPS class
|
:f c_ptr handle: reference to the LAMMPS class
|
||||||
:f close: :f:func:`close`
|
:f close: :f:func:`close`
|
||||||
@ -202,7 +238,7 @@ of the contents of the ``LIBLAMMPS`` Fortran interface to LAMMPS.
|
|||||||
This method will call :cpp:func:`lammps_commands_list` to have LAMMPS
|
This method will call :cpp:func:`lammps_commands_list` to have LAMMPS
|
||||||
execute a list of input lines.
|
execute a list of input lines.
|
||||||
|
|
||||||
:p character(len=*) cmd(*): list of LAMMPS input lines
|
:p character(len=*) cmd(:): list of LAMMPS input lines
|
||||||
|
|
||||||
.. f:subroutine:: commands_string(str)
|
.. f:subroutine:: commands_string(str)
|
||||||
|
|
||||||
@ -210,4 +246,3 @@ of the contents of the ``LIBLAMMPS`` Fortran interface to LAMMPS.
|
|||||||
execute a block of commands from a string.
|
execute a block of commands from a string.
|
||||||
|
|
||||||
:p character(len=*) str: LAMMPS input in string
|
:p character(len=*) str: LAMMPS input in string
|
||||||
|
|
||||||
|
|||||||
@ -22,8 +22,9 @@ General howto
|
|||||||
Howto_replica
|
Howto_replica
|
||||||
Howto_library
|
Howto_library
|
||||||
Howto_couple
|
Howto_couple
|
||||||
Howto_client_server
|
|
||||||
Howto_mdi
|
Howto_mdi
|
||||||
|
Howto_bpm
|
||||||
|
Howto_broken_bonds
|
||||||
|
|
||||||
Settings howto
|
Settings howto
|
||||||
==============
|
==============
|
||||||
@ -65,6 +66,7 @@ Force fields howto
|
|||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
Howto_bioFF
|
Howto_bioFF
|
||||||
|
Howto_amoeba
|
||||||
Howto_tip3p
|
Howto_tip3p
|
||||||
Howto_tip4p
|
Howto_tip4p
|
||||||
Howto_spc
|
Howto_spc
|
||||||
|
|||||||
324
doc/src/Howto_amoeba.rst
Normal file
324
doc/src/Howto_amoeba.rst
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
AMOEBA and HIPPO force fields
|
||||||
|
=============================
|
||||||
|
|
||||||
|
The AMOEBA and HIPPO polarizable force fields were developed by Jay
|
||||||
|
Ponder's group at the U Washington at St Louis. The LAMMPS
|
||||||
|
implementation is based on Fortran 90 code provided by the Ponder
|
||||||
|
group in their `Tinker MD software <https://dasher.wustl.edu/tinker/>`_.
|
||||||
|
|
||||||
|
The current implementation (July 2022) of AMOEBA in LAMMPS matches the
|
||||||
|
version discussed in :ref:`(Ponder) <amoeba-Ponder>`, :ref:`(Ren)
|
||||||
|
<amoeba-Ren>`, and :ref:`(Shi) <amoeba-Shi>`. Likewise the current
|
||||||
|
implementation of HIPPO in LAMMPS matches the version discussed in
|
||||||
|
:ref:`(Rackers) <amoeba-Rackers>`.
|
||||||
|
|
||||||
|
These force fields can be used when polarization effects are desired
|
||||||
|
in simulations of water, organic molecules, and biomolecules including
|
||||||
|
proteins, provided that parameterizations (Tinker PRM force field
|
||||||
|
files) are available for the systems you are interested in. Files in
|
||||||
|
the LAMMPS potentials directory with a "amoeba" or "hippo" suffix can
|
||||||
|
be used. The Tinker distribution and website have additional force
|
||||||
|
field files as well:
|
||||||
|
`https://github.com/TinkerTools/tinker/tree/release/params
|
||||||
|
<https://github.com/TinkerTools/tinker/tree/release/params>`_.
|
||||||
|
|
||||||
|
Note that currently, HIPPO can only be used for water systems, but
|
||||||
|
HIPPO files for a variety of small organic and biomolecules are in
|
||||||
|
preparation by the Ponder group. Those force field files will be
|
||||||
|
included in the LAMMPS distribution when available.
|
||||||
|
|
||||||
|
To use the AMOEBA or HIPPO force fields, a simulation must be 3d, and
|
||||||
|
fully periodic or fully non-periodic, and use an orthogonal (not
|
||||||
|
triclinic) simulation box.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
The AMOEBA and HIPPO force fields contain the following terms in their
|
||||||
|
energy (U) computation. Further details for AMOEBA equations are in
|
||||||
|
:ref:`(Ponder) <amoeba-Ponder>`, further details for the HIPPO
|
||||||
|
equations are in :ref:`(Rackers) <amoeba-Rackers>`.
|
||||||
|
|
||||||
|
.. math::
|
||||||
|
|
||||||
|
U & = U_{intermolecular} + U_{intramolecular} \\
|
||||||
|
U_{intermolecular} & = U_{hal} + U_{repulsion} + U_{dispersion} + U_{multipole} + U_{polar} + U_{qxfer} \\
|
||||||
|
U_{intramolecular} & = U_{bond} + U_{angle} + U_{torsion} + U_{oop} + U_{b\theta} + U_{UB} + U_{pitorsion} + U_{bitorsion}
|
||||||
|
|
||||||
|
For intermolecular terms, the AMOEBA force field includes only the
|
||||||
|
:math:`U_{hal}`, :math:`U_{multipole}`, :math:`U_{polar}` terms. The
|
||||||
|
HIPPO force field includes all but the :math:`U_{hal}` term. In
|
||||||
|
LAMMPS, these are all computed by the :doc:`pair_style amoeba or hippo
|
||||||
|
<pair_style>` command. Note that the :math:`U_{multipole}` and
|
||||||
|
:math:`U_{polar}` terms in this formula are not the same for the
|
||||||
|
AMOEBA and HIPPO force fields.
|
||||||
|
|
||||||
|
For intramolecular terms, the :math:`U_{bond}`, :math:`U_{angle}`,
|
||||||
|
:math:`U_{torsion}`, :math:`U_{oop}` terms are computed by the
|
||||||
|
:doc:`bond_style class2 <bond_class2>` :doc:`angle_style amoeba
|
||||||
|
<angle_amoeba>`, :doc:`dihedral_style fourier <dihedral_fourier>`, and
|
||||||
|
:doc:`improper_style amoeba <improper_amoeba>` commands respectively.
|
||||||
|
The :doc:`angle_style amoeba <angle_amoeba>` command includes the
|
||||||
|
:math:`U_{b\theta}` bond-angle cross term, and the :math:`U_{UB}` term
|
||||||
|
for a Urey-Bradley bond contribution between the I,K atoms in the IJK
|
||||||
|
angle.
|
||||||
|
|
||||||
|
The :math:`U_{pitorsion}` term is computed by the :doc:`fix
|
||||||
|
amoeba/pitorsion <fix_amoeba_pitorsion>` command. It computes 6-body
|
||||||
|
interaction between a pair of bonded atoms which each have 2
|
||||||
|
additional bond partners.
|
||||||
|
|
||||||
|
The :math:`U_{bitorsion}` term is computed by the :doc:`fix
|
||||||
|
amoeba/bitorsion <fix_amoeba_bitorsion>` command. It computes 5-body
|
||||||
|
interaction between two 4-body torsions (dihedrals) which overlap,
|
||||||
|
having 3 atoms in common.
|
||||||
|
|
||||||
|
These command doc pages have additional details on the terms they
|
||||||
|
compute:
|
||||||
|
|
||||||
|
* :doc:`pair_style amoeba or hippo <pair_amoeba>`
|
||||||
|
* :doc:`bond_style class2 <bond_class2>`
|
||||||
|
* :doc:`angle_style amoeba <angle_amoeba>`
|
||||||
|
* :doc:`dihedral_style fourier <dihedral_fourier>`
|
||||||
|
* :doc:`improper_style amoeba <improper_amoeba>`
|
||||||
|
* :doc:`fix amoeba/pitorsion <fix_amoeba_pitorsion>`
|
||||||
|
* :doc:`fix amoeba/bitorsion <fix_amoeba_bitorsion>`
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
To use the AMOEBA or HIPPO force fields in LAMMPS, use commands like
|
||||||
|
the following appropriately in your input script. The only change
|
||||||
|
needed for AMOEBA vs HIPPO simulation is for the :doc:`pair_style
|
||||||
|
<pair_style>` and :doc:`pair_coeff <pair_coeff>` commands, as shown
|
||||||
|
below. See examples/amoeba for example input scripts for both AMOEBA
|
||||||
|
and HIPPO.
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
units real # required
|
||||||
|
atom_style amoeba
|
||||||
|
bond_style class2 # CLASS2 package
|
||||||
|
angle_style amoeba
|
||||||
|
dihedral_style fourier # EXTRA-MOLECULE package
|
||||||
|
improper_style amoeba
|
||||||
|
# required per-atom data
|
||||||
|
fix amtype all property/atom i_amtype ghost yes
|
||||||
|
fix extra all property/atom &
|
||||||
|
i_amgroup i_ired i_xaxis i_yaxis i_zaxis d_pval ghost yes
|
||||||
|
fix polaxe all property/atom i_polaxe
|
||||||
|
|
||||||
|
fix pit all amoeba/pitorsion # PiTorsion terms in FF
|
||||||
|
fix_modify pit energy yes
|
||||||
|
# Bitorsion terms in FF
|
||||||
|
fix bit all amoeba/bitorsion bitorsion.ubiquitin.data
|
||||||
|
fix_modify bit energy yes
|
||||||
|
|
||||||
|
read_data data.ubiquitin fix amtype NULL "Tinker Types" &
|
||||||
|
fix pit "pitorsion types" "PiTorsion Coeffs" &
|
||||||
|
fix pit pitorsions PiTorsions &
|
||||||
|
fix bit bitorsions BiTorsions
|
||||||
|
|
||||||
|
pair_style amoeba # AMOEBA FF
|
||||||
|
pair_coeff * * amoeba_ubiquitin.prm amoeba_ubiquitin.key
|
||||||
|
|
||||||
|
pair_style hippo # HIPPO FF
|
||||||
|
pair_coeff * * hippo_water.prm hippo_water.key
|
||||||
|
|
||||||
|
special_bonds lj/coul 0.5 0.5 0.5 one/five yes # 1-5 neighbors
|
||||||
|
|
||||||
|
The data file read by the :doc:`read_data <read_data>` command should
|
||||||
|
be created by the tools/tinker/tinker2lmp.py conversion program
|
||||||
|
described below. It will create a section in the data file with the
|
||||||
|
header "Tinker Types". A :doc:`fix property/atom <fix_property_atom>`
|
||||||
|
command for the data must be specified before the read_data command.
|
||||||
|
In the example above the fix ID is *amtype*.
|
||||||
|
|
||||||
|
Similarly, if the system you are simulating defines AMOEBA/HIPPO
|
||||||
|
pitorsion or bitorsion interactions, there will be entries in the data
|
||||||
|
file for those interactions. They require a :doc:`fix
|
||||||
|
amoeba/pitortion <fix_amoeba_pitorsion>` and :doc:`fix
|
||||||
|
amoeba/bitorsion <fix_amoeba_bitorsion>` command be defined. In the
|
||||||
|
example above, the IDs for these two fixes are *pit* and *bit*.
|
||||||
|
|
||||||
|
Of course, if the system being modeled does not have one or more of
|
||||||
|
the following -- bond, angle, dihedral, improper, pitorsion,
|
||||||
|
bitorsion interactions -- then the corresponding style and fix
|
||||||
|
commands above do not need to be used. See the example scripts in
|
||||||
|
examples/amoeba for water systems as examples; they are simpler than
|
||||||
|
what is listed above.
|
||||||
|
|
||||||
|
The two :doc:`fix property/atom <fix_property_atom>` commands with IDs
|
||||||
|
(in the example above) *extra* and *polaxe* are also needed to define
|
||||||
|
internal per-atom quantities used by the AMOEBA and HIPPO force
|
||||||
|
fields.
|
||||||
|
|
||||||
|
The :doc:`pair_coeff <pair_coeff>` command used for either the AMOEBA
|
||||||
|
or HIPPO force field takes two arguments for Tinker force field files,
|
||||||
|
namely a PRM and KEY file. The keyfile can be specified as NULL and
|
||||||
|
default values for a various settings will be used. Note that these 2
|
||||||
|
files are meant to allow use of native Tinker files as-is. However
|
||||||
|
LAMMPS does not support all the options which can be included
|
||||||
|
in a Tinker PRM or KEY file. See specifics below.
|
||||||
|
|
||||||
|
A :doc:`special_bonds <special_bonds>` command with the *one/five*
|
||||||
|
option is required, since the AMOEBA/HIPPO force fields define
|
||||||
|
weighting factors for not only 1-2, 1-3, 1-4 interactions, but also
|
||||||
|
1-5 interactions. This command will trigger a per-atom list of 1-5
|
||||||
|
neighbors to be generated. The AMOEBA and HIPPO force fields define
|
||||||
|
their own custom weighting factors for all the 1-2, 1-3, 1-4, 1-5
|
||||||
|
terms which in the Tinker PRM and KEY files; they can be different for
|
||||||
|
different terms in the force field.
|
||||||
|
|
||||||
|
In addition to the list above, these command doc pages have additional
|
||||||
|
details:
|
||||||
|
|
||||||
|
* :doc:`atom_style amoeba <atom_style>`
|
||||||
|
* :doc:`fix property/atom <fix_property_atom>`
|
||||||
|
* :doc:`special_bonds <special_bonds>`
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
Tinker PRM and KEY files
|
||||||
|
|
||||||
|
A Tinker PRM file is composed of sections, each of which has multiple
|
||||||
|
lines. This is the list of PRM sections LAMMPS knows how to parse and
|
||||||
|
use. Any other sections are skipped:
|
||||||
|
|
||||||
|
* Angle Bending Parameters
|
||||||
|
* Atom Type Definitions
|
||||||
|
* Atomic Multipole Parameters
|
||||||
|
* Bond Stretching Parameters
|
||||||
|
* Charge Penetration Parameters
|
||||||
|
* Charge Transfer Parameters
|
||||||
|
* Dipole Polarizability Parameters
|
||||||
|
* Dispersion Parameters
|
||||||
|
* Force Field Definition
|
||||||
|
* Literature References
|
||||||
|
* Out-of-Plane Bend Parameters
|
||||||
|
* Pauli Repulsion Parameters
|
||||||
|
* Pi-Torsion Parameters
|
||||||
|
* Stretch-Bend Parameters
|
||||||
|
* Torsion-Torsion Parameters
|
||||||
|
* Torsional Parameters
|
||||||
|
* Urey-Bradley Parameters
|
||||||
|
* Van der Waals Pair Parameters
|
||||||
|
* Van der Waals Parameters
|
||||||
|
|
||||||
|
A Tinker KEY file is composed of lines, each of which has a keyword
|
||||||
|
followed by zero or more parameters. This is the list of keywords
|
||||||
|
LAMMPS knows how to parse and use in the same manner Tinker does. Any
|
||||||
|
other keywords are skipped. The value in parenthesis is the default
|
||||||
|
value for the keyword if it is not specified, or if the keyfile in the
|
||||||
|
:doc:`pair_coeff <pair_coeff>` command is specified as NULL:
|
||||||
|
|
||||||
|
* a-axis (0.0)
|
||||||
|
* b-axis (0.0)
|
||||||
|
* c-axis (0.0)
|
||||||
|
* ctrn-cutoff (6.0)
|
||||||
|
* ctrn-taper (0.9 * ctrn-cutoff)
|
||||||
|
* cutoff
|
||||||
|
* delta-halgren (0.07)
|
||||||
|
* dewald (no long-range dispersion unless specified)
|
||||||
|
* dewald-alpha (0.4)
|
||||||
|
* dewald-cutoff (7.0)
|
||||||
|
* dispersion-cutoff (9.0)
|
||||||
|
* dispersion-taper (9.0 * dispersion-cutoff)
|
||||||
|
* dpme-grid
|
||||||
|
* dpme-order (4)
|
||||||
|
* ewald (no long-range electrostatics unless specified)
|
||||||
|
* ewald-alpha (0.4)
|
||||||
|
* ewald-cutoff (7.0)
|
||||||
|
* gamma-halgren (0.12)
|
||||||
|
* mpole-cutoff (9.0)
|
||||||
|
* mpole-taper (0.65 * mpole-cutoff)
|
||||||
|
* pcg-guess (enabled by default)
|
||||||
|
* pcg-noguess (disable pcg-guess if specified)
|
||||||
|
* pcg-noprecond (disable pcg-precond if specified)
|
||||||
|
* pcg-peek (1.0)
|
||||||
|
* pcg-precond (enabled by default)
|
||||||
|
* pewald-alpha (0.4)
|
||||||
|
* pme-grid
|
||||||
|
* pme-order (5)
|
||||||
|
* polar-eps (1.0e-6)
|
||||||
|
* polar-iter (100)
|
||||||
|
* polar-predict (no prediction operation unless specified)
|
||||||
|
* ppme-order (5)
|
||||||
|
* repulsion-cutoff (6.0)
|
||||||
|
* repulsion-taper (0.9 * repulsion-cutoff)
|
||||||
|
* taper
|
||||||
|
* usolve-cutoff (4.5)
|
||||||
|
* usolve-diag (2.0)
|
||||||
|
* vdw-cutoff (9.0)
|
||||||
|
* vdw-taper (0.9 * vdw-cutoff)
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
Tinker2lmp.py tool
|
||||||
|
|
||||||
|
This conversion tool is found in the tools/tinker directory.
|
||||||
|
As shown in examples/amoeba/README, these commands produce
|
||||||
|
the data files found in examples/amoeba, and also illustrate
|
||||||
|
all the options available to use with the tinker2lmp.py script:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
% python tinker2lmp.py -xyz water_dimer.xyz -amoeba amoeba_water.prm -data data.water_dimer.amoeba # AMOEBA non-periodic system
|
||||||
|
% python tinker2lmp.py -xyz water_dimer.xyz -hippo hippo_water.prm -data data.water_dimer.hippo # HIPPO non-periodic system
|
||||||
|
% python tinker2lmp.py -xyz water_box.xyz -amoeba amoeba_water.prm -data data.water_box.amoeba -pbc 18.643 18.643 18.643 # AMOEBA periodic system
|
||||||
|
% python tinker2lmp.py -xyz water_box.xyz -hippo hippo_water.prm -data data.water_box.hippo -pbc 18.643 18.643 18.643 # HIPPO periodic system
|
||||||
|
% python tinker2lmp.py -xyz ubiquitin.xyz -amoeba amoeba_ubiquitin.prm -data data.ubiquitin.new -pbc 54.99 41.91 41.91 -bitorsion bitorsion.ubiquitin.data.new # system with bitorsions
|
||||||
|
|
||||||
|
Switches and their arguments may be specified in any order.
|
||||||
|
|
||||||
|
The -xyz switch is required and specifies an input XYZ file as an
|
||||||
|
argument. The format of this file is an extended XYZ format defined
|
||||||
|
and used by Tinker for its input. Example \*.xyz files are in the
|
||||||
|
examples/amoeba directory. The file lists the atoms in the system.
|
||||||
|
Each atom has the following information: Tinker species name (ignored
|
||||||
|
by LAMMPS), xyz coordinates, Tinker numeric type, and a list of atom
|
||||||
|
IDs the atom is bonded to.
|
||||||
|
|
||||||
|
Here is more information about the extended XYZ format defined and
|
||||||
|
used by Tinker, and links to programs that convert standard PDB files
|
||||||
|
to the extended XYZ format:
|
||||||
|
|
||||||
|
* `http://openbabel.org/docs/current/FileFormats/Tinker_XYZ_format.html <http://openbabel.org/docs/current/FileFormats/Tinker_XYZ_format.html>`_
|
||||||
|
* `https://github.com/emleddin/pdbxyz-xyzpdb <https://github.com/emleddin/pdbxyz-xyzpdb>`_
|
||||||
|
* `https://github.com/TinkerTools/tinker/blob/release/source/pdbxyz.f <https://github.com/TinkerTools/tinker/blob/release/source/pdbxyz.f>`_
|
||||||
|
|
||||||
|
The -amoeba or -hippo switch is required. It specifies an input
|
||||||
|
AMOEBA or HIPPO PRM force field file as an argument. This should be
|
||||||
|
the same file used by the :doc:`pair_style <pair_style>` command in
|
||||||
|
the input script.
|
||||||
|
|
||||||
|
The -data switch is required. It specifies an output file name for
|
||||||
|
the LAMMPS data file that will be produced.
|
||||||
|
|
||||||
|
For periodic systems, the -pbc switch is required. It specifies the
|
||||||
|
periodic box size for each dimension (x,y,z). For a Tinker simulation
|
||||||
|
these are specified in the KEY file.
|
||||||
|
|
||||||
|
The -bitorsion switch is only needed if the system contains Tinker
|
||||||
|
bitorsion interactions. The data for each type of bitorsion
|
||||||
|
interaction will be written to the specified file, and read by the
|
||||||
|
:doc:`fix amoeba/bitorsion <fix_amoeba_bitorsion>` command. The data
|
||||||
|
includes 2d arrays of values to which splines are fit, and thus is not
|
||||||
|
compatible with the LAMMPS data file format.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. _howto-Ponder:
|
||||||
|
|
||||||
|
**(Ponder)** Ponder, Wu, Ren, Pande, Chodera, Schnieders, Haque, Mobley, Lambrecht, DiStasio Jr, M. Head-Gordon, Clark, Johnson, T. Head-Gordon, J Phys Chem B, 114, 2549-2564 (2010).
|
||||||
|
|
||||||
|
.. _howto-Rackers:
|
||||||
|
|
||||||
|
**(Rackers)** Rackers, Silva, Wang, Ponder, J Chem Theory Comput, 17, 7056-7084 (2021).
|
||||||
|
|
||||||
|
.. _howto-Ren:
|
||||||
|
|
||||||
|
**(Ren)** Ren and Ponder, J Phys Chem B, 107, 5933 (2003).
|
||||||
|
|
||||||
|
.. _howto-Shi:
|
||||||
|
|
||||||
|
**(Shi)** Shi, Xia, Zhang, Best, Wu, Ponder, Ren, J Chem Theory Comp, 9, 4046, 2013.
|
||||||
|
|
||||||
@ -239,7 +239,7 @@ is consistent with the 6 moments of inertia: ixx iyy izz ixy ixz iyz =
|
|||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
3 1 27
|
3 1 19
|
||||||
4
|
4
|
||||||
1 1 4 0 0 0
|
1 1 4 0 0 0
|
||||||
-0.7071 -0.7071 0
|
-0.7071 -0.7071 0
|
||||||
|
|||||||
119
doc/src/Howto_bpm.rst
Normal file
119
doc/src/Howto_bpm.rst
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
Bonded particle models
|
||||||
|
======================
|
||||||
|
|
||||||
|
The BPM package implements bonded particle models which can be used to
|
||||||
|
simulate mesoscale solids. Solids are constructed as a collection of
|
||||||
|
particles which each represent a coarse-grained region of space much
|
||||||
|
larger than the atomistic scale. Particles within a solid region are
|
||||||
|
then connected by a network of bonds to provide solid elasticity.
|
||||||
|
|
||||||
|
Unlike traditional bonds in molecular dynamics, the equilibrium bond
|
||||||
|
length can vary between bonds. Bonds store the reference state. This
|
||||||
|
includes setting the equilibrium length equal to the initial distance
|
||||||
|
between the two particles but can also include data on the bond
|
||||||
|
orientation for rotational models. This produces a stress free initial
|
||||||
|
state. Furthermore, bonds are allowed to break under large strains
|
||||||
|
producing fracture. The examples/bpm directory has sample input scripts
|
||||||
|
for simulations of the fragmentation of an impacted plate and the
|
||||||
|
pouring of extended, elastic bodies.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
Bonds can be created using a :doc:`read data <read_data>` or
|
||||||
|
:doc:`create bonds <create_bonds>` command. Alternatively, a
|
||||||
|
:doc:`molecule <molecule>` template with bonds can be used with
|
||||||
|
:doc:`fix deposit <fix_deposit>` or :doc:`fix pour <fix_pour>` to
|
||||||
|
create solid grains.
|
||||||
|
|
||||||
|
In this implementation, bonds store their reference state when they are
|
||||||
|
first computed in the setup of the first simulation run. Data is then
|
||||||
|
preserved across run commands and is written to :doc:`binary restart
|
||||||
|
files <restart>` such that restarting the system will not reset the
|
||||||
|
reference state of a bond. Bonds that are created midway into a run,
|
||||||
|
such as those created by pouring grains using :doc:`fix pour
|
||||||
|
<fix_pour>`, are initialized on that timestep.
|
||||||
|
|
||||||
|
As bonds can be broken between neighbor list builds, the
|
||||||
|
:doc:`special_bonds <special_bonds>` command works differently for BPM
|
||||||
|
bond styles. There are two possible settings which determine how pair
|
||||||
|
interactions work between bonded particles. First, one can turn off
|
||||||
|
all pair interactions between bonded particles. Unlike :doc:`bond
|
||||||
|
quartic <bond_quartic>`, this is not done by subtracting pair forces
|
||||||
|
during the bond computation but rather by dynamically updating the
|
||||||
|
special bond list. This is the default behavior of BPM bond styles and
|
||||||
|
is done by updating the 1-2 special bond list as bonds break. To do
|
||||||
|
this, LAMMPS requires :doc:`newton <newton>` bond off such that all
|
||||||
|
processors containing an atom know when a bond breaks. Additionally,
|
||||||
|
one must do either (A) or (B).
|
||||||
|
|
||||||
|
A) Use the following special bond settings
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
special_bonds lj 0 1 1 coul 1 1 1
|
||||||
|
|
||||||
|
These settings accomplish two goals. First, they turn off 1-3 and 1-4
|
||||||
|
special bond lists, which are not currently supported for BPMs. As
|
||||||
|
BPMs often have dense bond networks, generating 1-3 and 1-4 special
|
||||||
|
bond lists is expensive. By setting the lj weight for 1-2 bonds to
|
||||||
|
zero, this turns off pairwise interactions. Even though there are no
|
||||||
|
charges in BPM models, setting a nonzero coul weight for 1-2 bonds
|
||||||
|
ensures all bonded neighbors are still included in the neighbor list
|
||||||
|
in case bonds break between neighbor list builds.
|
||||||
|
|
||||||
|
B) Alternatively, one can simply overlay pair interactions such that all
|
||||||
|
bonded particles also feel pair interactions. This can be
|
||||||
|
accomplished by using the *overlay/pair* keyword present in all bpm
|
||||||
|
bond styles and by using the following special bond settings
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
special_bonds lj/coul 1 1 1
|
||||||
|
|
||||||
|
See the :doc:`Howto <Howto_broken_bonds>` page on broken bonds for
|
||||||
|
more information.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
Currently there are two types of bonds included in the BPM
|
||||||
|
package. The first bond style, :doc:`bond bpm/spring
|
||||||
|
<bond_bpm_spring>`, only applies pairwise, central body forces. Point
|
||||||
|
particles must have :doc:`bond atom style <atom_style>` and may be
|
||||||
|
thought of as nodes in a spring network. Alternatively, the second
|
||||||
|
bond style, :doc:`bond bpm/rotational <bond_bpm_rotational>`, resolves
|
||||||
|
tangential forces and torques arising with the shearing, bending, and
|
||||||
|
twisting of the bond due to rotation or displacement of particles.
|
||||||
|
Particles are similar to those used in the :doc:`granular package
|
||||||
|
<Howto_granular>`, :doc:`atom style sphere <atom_style>`. However,
|
||||||
|
they must also track the current orientation of particles and store bonds
|
||||||
|
and therefore use a :doc:`bpm/sphere atom style <atom_style>`.
|
||||||
|
This also requires a unique integrator :doc:`fix nve/bpm/sphere
|
||||||
|
<fix_nve_bpm_sphere>` which numerically integrates orientation similar
|
||||||
|
to :doc:`fix nve/asphere <fix_nve_asphere>`.
|
||||||
|
|
||||||
|
To monitor the fracture of bonds in the system, all BPM bond styles
|
||||||
|
have the ability to record instances of bond breakage to output using
|
||||||
|
the :doc:`dump local <dump>` command. Additionally, one can use
|
||||||
|
:doc:`compute nbond/atom <compute_nbond_atom>` to tally the current
|
||||||
|
number of bonds per atom.
|
||||||
|
|
||||||
|
In addition to bond styles, a new pair style :doc:`pair bpm/spring
|
||||||
|
<pair_bpm_spring>` was added to accompany the bpm/spring bond
|
||||||
|
style. This pair style is simply a hookean repulsion with similar
|
||||||
|
velocity damping as its sister bond style.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
While LAMMPS has many utilities to create and delete bonds, *only*
|
||||||
|
the following are currently compatible with BPM bond styles:
|
||||||
|
|
||||||
|
* :doc:`create_bonds <create_bonds>`
|
||||||
|
* :doc:`delete_bonds <delete_bonds>`
|
||||||
|
* :doc:`fix bond/create <fix_bond_create>`
|
||||||
|
* :doc:`fix bond/break <fix_bond_break>`
|
||||||
|
* :doc:`fix bond/swap <fix_bond_swap>`
|
||||||
|
|
||||||
|
Note :doc:`create_bonds <create_bonds>` requires certain special_bonds settings.
|
||||||
|
To subtract pair interactions, one will need to switch between different
|
||||||
|
special_bonds settings in the input script. An example is found in
|
||||||
|
examples/bpm/impact.
|
||||||
48
doc/src/Howto_broken_bonds.rst
Normal file
48
doc/src/Howto_broken_bonds.rst
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
Broken Bonds
|
||||||
|
============
|
||||||
|
|
||||||
|
Typically, bond interactions persist for the duration of a simulation
|
||||||
|
in LAMMPS. However, there are some exceptions that allow for bonds to
|
||||||
|
break including the :doc:`quartic bond style <bond_quartic>` and the
|
||||||
|
bond styles in the :doc:`BPM package <Howto_bpm>` which contains the
|
||||||
|
:doc:`bpm/spring <bond_bpm_spring>` and
|
||||||
|
:doc:`bpm/rotational <bond_bpm_rotational>` bond styles. In these cases,
|
||||||
|
a bond can be broken if it is stretched beyond a user-defined threshold.
|
||||||
|
LAMMPS accomplishes this by setting the bond type to zero such that the
|
||||||
|
bond force is no longer computed.
|
||||||
|
|
||||||
|
Users are normally able to weight the contribution of pair forces to atoms
|
||||||
|
that are bonded using the :doc:`special_bonds command <special_bonds>`.
|
||||||
|
When bonds break, this is not always the case. For the quartic bond style,
|
||||||
|
pair forces are always turned off between bonded particles. LAMMPS does
|
||||||
|
this via a computational sleight-of-hand. It subtracts the pairwise
|
||||||
|
interaction as part of the bond computation. When the bond breaks, the
|
||||||
|
subtraction stops. For this to work, the pairwise interaction must always
|
||||||
|
be computed by the :doc:`pair_style <pair_style>` command, whether the bond
|
||||||
|
is broken or not. This means that :doc:`special_bonds <special_bonds>` must
|
||||||
|
be set to 1,1,1. After the bond breaks, the pairwise interaction between the
|
||||||
|
two atoms is turned on, since they are no longer bonded.
|
||||||
|
|
||||||
|
In the BPM package, one can either turn off all pair interactions between
|
||||||
|
bonded particles or leave them on, overlaying pair forces on top of bond
|
||||||
|
forces. To remove pair forces, the special bond list is dynamically
|
||||||
|
updated. More details can be found on the :doc:`Howto BPM <Howto_bpm>`
|
||||||
|
page.
|
||||||
|
|
||||||
|
Bonds can also be broken by fixes which change bond topology, including
|
||||||
|
:doc:`fix bond/break <fix_bond_break>` and
|
||||||
|
:doc:`fix bond/react <fix_bond_react>`. These fixes will automatically
|
||||||
|
trigger a rebuild of the neighbor list and update special bond data structures
|
||||||
|
when bonds are broken.
|
||||||
|
|
||||||
|
Note that when bonds are dumped to a file via the :doc:`dump local <dump>` command, bonds with type 0 are not included. The
|
||||||
|
:doc:`delete_bonds <delete_bonds>` command can also be used to query the
|
||||||
|
status of broken bonds or permanently delete them, e.g.:
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
delete_bonds all stats
|
||||||
|
delete_bonds all bond 0 remove
|
||||||
|
|
||||||
|
The compute :doc:`nbond/atom <compute_nbond_atom>` can also be used
|
||||||
|
to tally the current number of bonds per atom, excluding broken bonds.
|
||||||
@ -1,163 +0,0 @@
|
|||||||
Using LAMMPS in client/server mode
|
|
||||||
==================================
|
|
||||||
|
|
||||||
Client/server coupling of two codes is where one code is the "client"
|
|
||||||
and sends request messages to a "server" code. The server responds to
|
|
||||||
each request with a reply message. This enables the two codes to work
|
|
||||||
in tandem to perform a simulation. LAMMPS can act as either a client
|
|
||||||
or server code.
|
|
||||||
|
|
||||||
Some advantages of client/server coupling are that the two codes run
|
|
||||||
as stand-alone executables; they are not linked together. Thus
|
|
||||||
neither code needs to have a library interface. This often makes it
|
|
||||||
easier to run the two codes on different numbers of processors. If a
|
|
||||||
message protocol (format and content) is defined for a particular kind
|
|
||||||
of simulation, then in principle any code that implements the
|
|
||||||
client-side protocol can be used in tandem with any code that
|
|
||||||
implements the server-side protocol, without the two codes needing to
|
|
||||||
know anything more specific about each other.
|
|
||||||
|
|
||||||
A simple example of client/server coupling is where LAMMPS is the
|
|
||||||
client code performing MD timestepping. Each timestep it sends a
|
|
||||||
message to a server quantum code containing current coords of all the
|
|
||||||
atoms. The quantum code computes energy and forces based on the
|
|
||||||
coords. It returns them as a message to LAMMPS, which completes the
|
|
||||||
timestep.
|
|
||||||
|
|
||||||
A more complex example is where LAMMPS is the client code and
|
|
||||||
processes a series of data files, sending each configuration to a
|
|
||||||
quantum code to compute energy and forces. Or LAMMPS runs dynamics
|
|
||||||
with an atomistic force field, but pauses every N steps to ask the
|
|
||||||
quantum code to compute energy and forces.
|
|
||||||
|
|
||||||
Alternate methods for code coupling with LAMMPS are described on
|
|
||||||
the :doc:`Howto couple <Howto_couple>` doc page.
|
|
||||||
|
|
||||||
The protocol for using LAMMPS as a client is to use these 3 commands
|
|
||||||
in this order (other commands may come in between):
|
|
||||||
|
|
||||||
* :doc:`message client <message>` # initiate client/server interaction
|
|
||||||
* :doc:`fix client/md <fix_client_md>` # any client fix which makes specific requests to the server
|
|
||||||
* :doc:`message quit <message>` # terminate client/server interaction
|
|
||||||
|
|
||||||
In between the two message commands, a client fix command and
|
|
||||||
:doc:`unfix <unfix>` command can be used multiple times. Similarly,
|
|
||||||
this sequence of 3 commands can be repeated multiple times, assuming
|
|
||||||
the server program operates in a similar fashion, to initiate and
|
|
||||||
terminate client/server communication.
|
|
||||||
|
|
||||||
The protocol for using LAMMPS as a server is to use these 2 commands
|
|
||||||
in this order (other commands may come in between):
|
|
||||||
|
|
||||||
* :doc:`message server <message>` # initiate client/server interaction
|
|
||||||
* :doc:`server md <server_md>` # any server command which responds to specific requests from the client
|
|
||||||
|
|
||||||
This sequence of 2 commands can be repeated multiple times, assuming
|
|
||||||
the client program operates in a similar fashion, to initiate and
|
|
||||||
terminate client/server communication.
|
|
||||||
|
|
||||||
LAMMPS support for client/server coupling is in its :ref:`MESSAGE package <PKG-MESSAGE>` which implements several
|
|
||||||
commands that enable LAMMPS to act as a client or server, as discussed
|
|
||||||
below. The MESSAGE package also wraps a client/server library called
|
|
||||||
CSlib which enables two codes to exchange messages in different ways,
|
|
||||||
either via files, sockets, or MPI. The CSlib is provided with LAMMPS
|
|
||||||
in the lib/message dir. The CSlib has its own
|
|
||||||
`website <https://cslib.sandia.gov>`_ with documentation and test
|
|
||||||
programs.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
For client/server coupling to work between LAMMPS and another
|
|
||||||
code, the other code also has to use the CSlib. This can sometimes be
|
|
||||||
done without any modifications to the other code by simply wrapping it
|
|
||||||
with a Python script that exchanges CSlib messages with LAMMPS and
|
|
||||||
prepares input for or processes output from the other code. The other
|
|
||||||
code also has to implement a matching protocol for the format and
|
|
||||||
content of messages that LAMMPS exchanges with it.
|
|
||||||
|
|
||||||
These are the commands currently in the MESSAGE package for two
|
|
||||||
protocols, MD and MC (Monte Carlo). New protocols can easily be
|
|
||||||
defined and added to this directory, where LAMMPS acts as either the
|
|
||||||
client or server.
|
|
||||||
|
|
||||||
* :doc:`message <message>`
|
|
||||||
* :doc:`fix client md <fix_client_md>` = LAMMPS is a client for running MD
|
|
||||||
* :doc:`server md <server_md>` = LAMMPS is a server for computing MD forces
|
|
||||||
* :doc:`server mc <server_mc>` = LAMMPS is a server for computing a Monte Carlo energy
|
|
||||||
|
|
||||||
The server doc files give details of the message protocols
|
|
||||||
for data that is exchanged between the client and server.
|
|
||||||
|
|
||||||
These example directories illustrate how to use LAMMPS as either a
|
|
||||||
client or server code:
|
|
||||||
|
|
||||||
* examples/message
|
|
||||||
* examples/COUPLE/README
|
|
||||||
* examples/COUPLE/lammps_mc
|
|
||||||
* examples/COUPLE/lammps_nwchem
|
|
||||||
* examples/COUPLE/lammps_vasp
|
|
||||||
|
|
||||||
The examples/message directory couples a client instance of LAMMPS to a
|
|
||||||
server instance of LAMMPS.
|
|
||||||
|
|
||||||
The files in the *lammps_mc* folder show how to couple LAMMPS as
|
|
||||||
a server to a simple Monte Carlo client code as the driver.
|
|
||||||
|
|
||||||
The files in the *lammps_nwchem* folder show how to couple LAMMPS
|
|
||||||
as a client code running MD timestepping to NWChem acting as a
|
|
||||||
server providing quantum DFT forces, through a Python wrapper script
|
|
||||||
on NWChem.
|
|
||||||
|
|
||||||
The files in the *lammps_vasp* folder show how to couple LAMMPS as
|
|
||||||
a client code running MD timestepping to VASP acting as a server
|
|
||||||
providing quantum DFT forces, through a Python wrapper script on VASP.
|
|
||||||
|
|
||||||
Here is how to launch a client and server code together for any of the
|
|
||||||
4 modes of message exchange that the :doc:`message <message>` command
|
|
||||||
and the CSlib support. Here LAMMPS is used as both the client and
|
|
||||||
server code. Another code could be substituted for either.
|
|
||||||
|
|
||||||
The examples below show launching both codes from the same window (or
|
|
||||||
batch script), using the "&" character to launch the first code in the
|
|
||||||
background. For all modes except *mpi/one*, you could also launch the
|
|
||||||
codes in separate windows on your desktop machine. It does not
|
|
||||||
matter whether you launch the client or server first.
|
|
||||||
|
|
||||||
In these examples either code can be run on one or more processors.
|
|
||||||
If running in a non-MPI mode (file or zmq) you can launch a code on a
|
|
||||||
single processor without using mpirun.
|
|
||||||
|
|
||||||
IMPORTANT: If you run in mpi/two mode, you must launch both codes via
|
|
||||||
mpirun, even if one or both of them runs on a single processor. This
|
|
||||||
is so that MPI can figure out how to connect both MPI processes
|
|
||||||
together to exchange MPI messages between them.
|
|
||||||
|
|
||||||
For message exchange in *file*, *zmq*, or *mpi/two* modes:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
% mpirun -np 1 lmp_mpi -log log.client < in.client &
|
|
||||||
% mpirun -np 2 lmp_mpi -log log.server < in.server
|
|
||||||
|
|
||||||
% mpirun -np 4 lmp_mpi -log log.client < in.client &
|
|
||||||
% mpirun -np 1 lmp_mpi -log log.server < in.server
|
|
||||||
|
|
||||||
% mpirun -np 2 lmp_mpi -log log.client < in.client &
|
|
||||||
% mpirun -np 4 lmp_mpi -log log.server < in.server
|
|
||||||
|
|
||||||
For message exchange in *mpi/one* mode:
|
|
||||||
|
|
||||||
Launch both codes in a single mpirun command:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
mpirun -np 2 lmp_mpi -mpicolor 0 -in in.message.client -log log.client : -np 4 lmp_mpi -mpicolor 1 -in in.message.server -log log.server
|
|
||||||
|
|
||||||
The two -np values determine how many procs the client and the server
|
|
||||||
run on.
|
|
||||||
|
|
||||||
A LAMMPS executable run in this manner must use the -mpicolor color
|
|
||||||
command-line option as their its option, where color is an integer
|
|
||||||
label that will be used to distinguish one executable from another in
|
|
||||||
the multiple executables that the mpirun command launches. In this
|
|
||||||
example the client was colored with a 0, and the server with a 1.
|
|
||||||
@ -12,16 +12,16 @@ LAMMPS can be coupled to other codes in at least 4 ways. Each has
|
|||||||
advantages and disadvantages, which you will have to think about in the
|
advantages and disadvantages, which you will have to think about in the
|
||||||
context of your application.
|
context of your application.
|
||||||
|
|
||||||
1. Define a new :doc:`fix <fix>` command that calls the other code. In
|
1. Define a new :doc:`fix <fix>` command that calls the other code.
|
||||||
this scenario, LAMMPS is the driver code. During timestepping,
|
In this scenario, LAMMPS is the driver code. During timestepping,
|
||||||
the fix is invoked, and can make library calls to the other code,
|
the fix is invoked, and can make library calls to the other code,
|
||||||
which has been linked to LAMMPS as a library. This is the way how the
|
which has been linked to LAMMPS as a library. This is the way the
|
||||||
:ref:`LATTE <PKG-LATTE>` package, which performs density-functional
|
:ref:`LATTE <PKG-LATTE>` package, which performs density-functional
|
||||||
tight-binding calculations using the `LATTE software <https://github.com/lanl/LATTE>`_
|
tight-binding calculations using the `LATTE software
|
||||||
to compute forces, is hooked to LAMMPS.
|
<https://github.com/lanl/LATTE>`_ to compute forces, is hooked to
|
||||||
See the :doc:`fix latte <fix_latte>` command for more details.
|
LAMMPS. See the :doc:`fix latte <fix_latte>` command for more
|
||||||
Also see the :doc:`Modify <Modify>` doc pages for info on how to
|
details. Also see the :doc:`Modify <Modify>` doc pages for info on
|
||||||
add a new fix to LAMMPS.
|
how to add a new fix to LAMMPS.
|
||||||
|
|
||||||
.. spacer
|
.. spacer
|
||||||
|
|
||||||
@ -58,6 +58,12 @@ context of your application.
|
|||||||
|
|
||||||
.. spacer
|
.. spacer
|
||||||
|
|
||||||
4. Couple LAMMPS with another code in a client/server mode. This is
|
4. Couple LAMMPS with another code in a client/server fashion, using
|
||||||
described on the :doc:`Howto client/server <Howto_client_server>` doc
|
using the `MDI Library
|
||||||
page.
|
<https://molssi-mdi.github.io/MDI_Library/html/index.html>`_
|
||||||
|
developed by the `Molecular Sciences Software Institute (MolSSI)
|
||||||
|
<https://molssi.org>`_ to run LAMMPS as either an MDI driver
|
||||||
|
(client) or an MDI engine (server). The MDI driver issues commands
|
||||||
|
to the MDI server to exchange data between them. See the
|
||||||
|
:doc:`Howto mdi <Howto_mdi>` page for more information about how
|
||||||
|
LAMMPS can operate in either of these modes.
|
||||||
|
|||||||
@ -18,23 +18,52 @@ At zero temperature, it is easy to estimate these derivatives by
|
|||||||
deforming the simulation box in one of the six directions using the
|
deforming the simulation box in one of the six directions using the
|
||||||
:doc:`change_box <change_box>` command and measuring the change in the
|
:doc:`change_box <change_box>` command and measuring the change in the
|
||||||
stress tensor. A general-purpose script that does this is given in the
|
stress tensor. A general-purpose script that does this is given in the
|
||||||
examples/elastic directory described on the :doc:`Examples <Examples>`
|
examples/ELASTIC directory described on the :doc:`Examples <Examples>`
|
||||||
doc page.
|
doc page.
|
||||||
|
|
||||||
Calculating elastic constants at finite temperature is more
|
Calculating elastic constants at finite temperature is more
|
||||||
challenging, because it is necessary to run a simulation that performs
|
challenging, because it is necessary to run a simulation that performs
|
||||||
time averages of differential properties. One way to do this is to
|
time averages of differential properties. There are at least
|
||||||
measure the change in average stress tensor in an NVT simulations when
|
3 ways to do this in LAMMPS. The most reliable way to do this is
|
||||||
|
by exploiting the relationship between elastic constants, stress
|
||||||
|
fluctuations, and the Born matrix, the second derivatives of energy
|
||||||
|
w.r.t. strain :ref:`(Ray) <Ray>`.
|
||||||
|
The Born matrix calculation has been enabled by
|
||||||
|
the :doc:`compute born/matrix <compute_born_matrix>` command,
|
||||||
|
which works for any bonded or non-bonded potential in LAMMPS.
|
||||||
|
The most expensive part of the calculation is the sampling of
|
||||||
|
the stress fluctuations. Several examples of this method are
|
||||||
|
provided in the examples/ELASTIC_T/BORN_MATRIX directory
|
||||||
|
described on the :doc:`Examples <Examples>` doc page.
|
||||||
|
|
||||||
|
A second way is to measure
|
||||||
|
the change in average stress tensor in an NVT simulations when
|
||||||
the cell volume undergoes a finite deformation. In order to balance
|
the cell volume undergoes a finite deformation. In order to balance
|
||||||
the systematic and statistical errors in this method, the magnitude of
|
the systematic and statistical errors in this method, the magnitude of
|
||||||
the deformation must be chosen judiciously, and care must be taken to
|
the deformation must be chosen judiciously, and care must be taken to
|
||||||
fully equilibrate the deformed cell before sampling the stress
|
fully equilibrate the deformed cell before sampling the stress
|
||||||
tensor. Another approach is to sample the triclinic cell fluctuations
|
tensor. An example of this method is provided in the
|
||||||
|
examples/ELASTIC_T/DEFORMATION directory
|
||||||
|
described on the :doc:`Examples <Examples>` doc page.
|
||||||
|
|
||||||
|
Another approach is to sample the triclinic cell fluctuations
|
||||||
that occur in an NPT simulation. This method can also be slow to
|
that occur in an NPT simulation. This method can also be slow to
|
||||||
converge and requires careful post-processing :ref:`(Shinoda) <Shinoda1>`
|
converge and requires careful post-processing :ref:`(Shinoda) <Shinoda1>`.
|
||||||
|
We do not provide an example of this method.
|
||||||
|
|
||||||
|
A nice review of the advantages and disadvantages of all of these methods
|
||||||
|
is provided in the paper by Clavier et al. :ref:`(Clavier) <Clavier>`.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
.. _Ray:
|
||||||
|
|
||||||
|
**(Ray)** J. R. Ray and A. Rahman, J Chem Phys, 80, 4423 (1984).
|
||||||
|
|
||||||
.. _Shinoda1:
|
.. _Shinoda1:
|
||||||
|
|
||||||
**(Shinoda)** Shinoda, Shiga, and Mikami, Phys Rev B, 69, 134103 (2004).
|
**(Shinoda)** Shinoda, Shiga, and Mikami, Phys Rev B, 69, 134103 (2004).
|
||||||
|
|
||||||
|
.. _Clavier:
|
||||||
|
|
||||||
|
**(Clavier)** G. Clavier, N. Desbiens, E. Bourasseau, V. Lachet, N. Brusselle-Dupend and B. Rousseau, Mol Sim, 43, 1413 (2017).
|
||||||
|
|||||||
@ -1,132 +1,163 @@
|
|||||||
Using LAMMPS with the MDI library for code coupling
|
Using LAMMPS with the MDI library for code coupling
|
||||||
===================================================
|
===================================================
|
||||||
|
|
||||||
.. note::
|
Client/server coupling of two (or more) codes is where one code is the
|
||||||
|
"client" and sends request messages (data) to one (or more) "server"
|
||||||
This Howto page will eventually replace the
|
code(s). A server responds to each request with a reply message
|
||||||
:doc:`Howto client/server <Howto_client_server>` doc page.
|
(data). This enables two (or more) codes to work in tandem to perform
|
||||||
|
a simulation. In this context, LAMMPS can act as either a client or
|
||||||
Client/server coupling of two codes is where one code is the "client"
|
server code. It does this by using the `MolSSI Driver Interface (MDI)
|
||||||
and sends request messages (data) to a "server" code. The server
|
library <https://molssi-mdi.github.io/MDI_Library/html/index.html>`_,
|
||||||
responds to each request with a reply message. This enables the two
|
|
||||||
codes to work in tandem to perform a simulation. LAMMPS can act as
|
|
||||||
either a client or server code; it does this by using the `MolSSI
|
|
||||||
Driver Interface (MDI) library
|
|
||||||
<https://molssi-mdi.github.io/MDI_Library/html/index.html>`_,
|
|
||||||
developed by the `Molecular Sciences Software Institute (MolSSI)
|
developed by the `Molecular Sciences Software Institute (MolSSI)
|
||||||
<https://molssi.org>`_.
|
<https://molssi.org>`_, which is supported by the :ref:`MDI <PKG-MDI>`
|
||||||
|
package.
|
||||||
|
|
||||||
Alternate methods for code coupling with LAMMPS are described on the
|
Alternate methods for code coupling with LAMMPS are described on the
|
||||||
:doc:`Howto couple <Howto_couple>` doc page.
|
:doc:`Howto couple <Howto_couple>` doc page.
|
||||||
|
|
||||||
Some advantages of client/server coupling are that the two codes can run
|
Some advantages of client/server coupling are that the codes can run
|
||||||
as stand-alone executables; they need not be linked together. Thus
|
as stand-alone executables; they need not be linked together. Thus
|
||||||
neither code needs to have a library interface. This also makes it easy
|
neither code needs to have a library interface. This also makes it
|
||||||
to run the two codes on different numbers of processors. If a message
|
easy to run the two codes on different numbers of processors. If a
|
||||||
protocol (format and content) is defined for a particular kind of
|
message protocol (format and content) is defined for a particular kind
|
||||||
simulation, then in principle any code which implements the client-side
|
of simulation, then in principle any code which implements the
|
||||||
protocol can be used in tandem with any code which implements the
|
client-side protocol can be used in tandem with any code which
|
||||||
server-side protocol. Neither code needs to know what specific other
|
implements the server-side protocol. Neither code needs to know what
|
||||||
code it is working with.
|
specific other code it is working with.
|
||||||
|
|
||||||
In MDI nomenclature, a client code is the "driver", and a server code is
|
In MDI nomenclature, a client code is the "driver", and a server code is
|
||||||
an "engine". One driver code can communicate with one or more instances
|
an "engine". One driver code can communicate with one or more instances
|
||||||
of one or more engine codes. Driver and engine codes can be written in
|
of one or more engine codes. Driver and engine codes can be written in
|
||||||
any language: C, C++, Fortran, Python, etc.
|
any language: C, C++, Fortran, Python, etc.
|
||||||
|
|
||||||
In addition to allowing driver and engine(s) running to run as
|
In addition to allowing driver and engine(s) to run as stand-alone
|
||||||
stand-alone executables, MDI also enables a server code to be a
|
executables, MDI also enables an engine to be a *plugin* to the client
|
||||||
"plugin" to the client code. In this scenario, server code(s) are
|
code. In this scenario, server code(s) are compiled as shared
|
||||||
compiled as shared libraries, and one (or more) instances of the
|
libraries, and one (or more) instances of the server are instantiated
|
||||||
server are instantiated by the driver code. If the driver code runs
|
by the driver code. If the driver code runs in parallel, it can split
|
||||||
in parallel, it can split its MPI communicator into multiple
|
its MPI communicator into multiple sub-communicators, and launch each
|
||||||
sub-communicators, and launch each plugin engine instance on a
|
plugin engine instance on a sub-communicator. Driver processors
|
||||||
sub-communicator. Driver processors in that sub-communicator exchange
|
within that sub-communicator exchange messages with the corresponding
|
||||||
messages with that engine instance, and can also send MPI messages to
|
engine instance, and can also send MPI messages to other processors in
|
||||||
other processors in the driver. The driver code can also destroy
|
the driver. The driver code can also destroy engine instances and
|
||||||
engine instances and re-instantiate them.
|
re-instantiate them. LAMMPS can operate as either a stand-alone or
|
||||||
|
plugin MDI engine. When it operates as a driver, if can use either
|
||||||
|
stand-alone or plugin MDI engines.
|
||||||
|
|
||||||
The way that a driver communicates with an engine is by making
|
The way in which an MDI driver communicates with an MDI engine is by
|
||||||
MDI_Send() and MDI_Recv() calls, which are conceptually similar to
|
making MDI_Send() and MDI_Recv() calls, which are conceptually similar
|
||||||
MPI_Send() and MPI_Recv() calls. Each send or receive has a string
|
to MPI_Send() and MPI_Recv() calls. Each send or receive operation
|
||||||
which identifies the command name, and optionally some data, which can
|
uses a string to identify the command name, and optionally some data,
|
||||||
be a single value or vector of values of any data type. Inside the
|
which can be a single value or vector of values of any data type.
|
||||||
MDI library, data is exchanged between the driver and engine via MPI
|
Inside the MDI library, data is exchanged between the driver and
|
||||||
calls or sockets. This a run-time choice by the user.
|
engine via MPI calls or sockets. This a run-time choice by the user.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
The :ref:`MDI <PKG-MDI>` package provides a :doc:`mdi engine <mdi>`
|
||||||
|
command which enables LAMMPS to operate as an MDI engine. Its doc
|
||||||
|
page explains the variety of standard and custom MDI commands which
|
||||||
|
the LAMMPS engine recognizes and can respond to.
|
||||||
|
|
||||||
|
The package also provides a :doc:`mdi plugin <mdi>` command which
|
||||||
|
enables LAMMPS to operate as an MDI driver and load an MDI engine as a
|
||||||
|
plugin library.
|
||||||
|
|
||||||
|
The package also has a `fix mdi/qm <fix_mdi_qm>` command in which
|
||||||
|
LAMMPS operates as an MDI driver in conjunction with a quantum
|
||||||
|
mechanics code as an MDI engine. The post_force() method of the
|
||||||
|
fix_mdi_qm.cpp file shows how a driver issues MDI commands to another
|
||||||
|
code. This command can be used to couple to an MDI engine which is
|
||||||
|
either a stand-alone code or a plugin library.
|
||||||
|
|
||||||
|
As explained on the `fix mdi/qm <fix_mdi_qm>` command doc page, it can
|
||||||
|
be used to perform *ab initio* MD simulations or energy minimizations,
|
||||||
|
or to evaluate the quantum energy and forces for a series of
|
||||||
|
independent systems. The examples/mdi directory has example input
|
||||||
|
scripts for all of these use cases.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
The examples/mdi directory contains Python scripts and LAMMPS input
|
||||||
|
script which use LAMMPS as either an MDI driver or engine or both.
|
||||||
|
Currently, 5 example use cases are provided:
|
||||||
|
|
||||||
|
* Run ab initio MD (AIMD) using 2 instances of LAMMPS. As a driver
|
||||||
|
LAMMPS performs the timestepping in either NVE or NPT mode. As an
|
||||||
|
engine, LAMMPS computes forces and is a surrogate for a quantum
|
||||||
|
code.
|
||||||
|
|
||||||
|
* As a driver, LAMMPS runs an MD simulation. Every N steps it passes
|
||||||
|
the current snapshot to an MDI engine to evaluate the energy,
|
||||||
|
virial, and peratom forces. As the engine LAMMPS is a surrogate for
|
||||||
|
a quantum code.
|
||||||
|
|
||||||
|
* As a driver, LAMMPS loops over a series of data files and passes the
|
||||||
|
configuration to an MDI engine to evaluate the energy, virial, and
|
||||||
|
peratom forces. As the engine LAMMPS is a surrogate for a quantum
|
||||||
|
code.
|
||||||
|
|
||||||
|
* A Python script driver invokes a sequence of unrelated LAMMPS
|
||||||
|
calculations. Calculations can be single-point energy/force
|
||||||
|
evaluations, MD runs, or energy minimizations.
|
||||||
|
|
||||||
|
* Run AIMD with a Python driver code and 2 LAMMPS instances as
|
||||||
|
engines. The first LAMMPS instance performs MD timestepping. The
|
||||||
|
second LAMMPS instance acts as a surrogate QM code to compute
|
||||||
|
forces.
|
||||||
|
|
||||||
|
Note that in any of these example where LAMMPS is used as an engine,
|
||||||
|
an actual QM code (which supports MDI) could be used in its place,
|
||||||
|
without modifying the input scripts or launch commands, except to
|
||||||
|
specify the name of the QM code.
|
||||||
|
|
||||||
|
The examples/mdi/Run.sh file illustrates how to launch both driver and
|
||||||
|
engine codes so that they communicate using the MDI library via either
|
||||||
|
MPI or sockets. Or using the engine as a stand-alone code or plugin
|
||||||
|
library.
|
||||||
|
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
As an example, LAMMPS and the ``pw.x`` command from Quantum Espresso (a
|
Currently there are at least two quantum DFT codes which have direct
|
||||||
suite of quantum DFT codes), can work together via the MDI library to
|
MDI support, `Quantum ESPRESSO (QE)
|
||||||
perform an ab initio MD (AIMD) simulation, where LAMMPS runs an MD
|
<https://www.quantum-espresso.org/>`_ and `INQ
|
||||||
simulation and sends a message each timestep to ``pw.x`` asking it to
|
<https://qsg.llnl.gov/node/101.html>`_. There are also several QM
|
||||||
compute quantum forces on the current configuration of atoms. Here is
|
codes which have indirect support through QCEngine or i-PI. The
|
||||||
how the 2 codes are launched to communicate by MPI:
|
former means they require a wrapper program (QCEngine) with MDI
|
||||||
|
support which writes/read files to pass data to the quantum code
|
||||||
|
itself. The list of QCEngine-supported and i-PI-supported quantum
|
||||||
|
codes is on the `MDI webpage
|
||||||
|
<https://molssi-mdi.github.io/MDI_Library/html/index.html>`_.
|
||||||
|
|
||||||
|
Here is how to build QE as a stand-alone ``pw.x`` file which can be
|
||||||
|
used in stand-alone mode:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
% mpirun -np 2 lmp_mpi -mdi "-role DRIVER -name d -method MPI" \
|
% git clone --branch mdi_plugin https://github.com/MolSSI-MDI/q-e.git <base_path>/q-e
|
||||||
-in in.aimd : -np 16 pw.x -in qe.in -mdi "-role ENGINE -name e -method MPI"
|
% build the executable pw.x, following the `QE build guide <https://gitlab.com/QEF/q-e/-/wikis/Developers/CMake-build-system>`_
|
||||||
|
|
||||||
In this case LAMMPS runs on 2 processors (MPI tasks), ``pw.x`` runs on 16
|
Here is how to build QE as a shared library which can be used in plugin mode,
|
||||||
processors.
|
which results in a libqemdi.so file in <base_path>/q-e/MDI/src:
|
||||||
|
|
||||||
Here is how the 2 codes are launched to communicate by sockets:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
% mpirun -np 2 lmp_mpi -mdi "-role DRIVER -name d -method TCP -port 8021" -in in.aimd
|
% git clone --branch mdi_plugin https://github.com/MolSSI-MDI/q-e.git <base_path>/q-e
|
||||||
% mpirun -np 16 pw.x -in qe.in -mdi "-role ENGINE -name e -method TCP -port 8021 -hostname localhost"
|
% cd <base_path>/q-e
|
||||||
|
% ./configure --enable-parallel --enable-openmp --enable-shared FFLAGS="-fPIC" FCFLAGS="-fPIC" CFLAGS="-fPIC" foxflags="-fPIC" try_foxflags="-fPIC"
|
||||||
|
% make -j 4 mdi
|
||||||
|
|
||||||
These commands could be issued in different windows on a desktop
|
INQ cannot be built as a stand-alone code; it is by design a library.
|
||||||
machine. Or in the same window, if the first command is ended with
|
Here is how to build INQ as a shared library which can be used in
|
||||||
"&" so as to run in the background. If "localhost" is replaced by an
|
plugin mode, which results in a libinqmdi.so file in
|
||||||
IP address, ``pw.x`` could be run on another machine on the same network, or
|
<base_path>/inq/build/examples:
|
||||||
even on another machine across the country.
|
|
||||||
|
|
||||||
After both codes initialize themselves to model the same system, this is
|
.. code-block:: bash
|
||||||
what occurs each timestep:
|
|
||||||
|
|
||||||
* LAMMPS send a ">COORDS" message to ``pw.x`` with a 3*N vector of current atom coords
|
% git clone --branch mdi --recurse-submodules https://gitlab.com/taylor-a-barnes/inq.git <base_path>/inq
|
||||||
* ``pw.x`` receives the message/coords and computes quantum forces on all the atoms
|
% cd <base_path>/inq
|
||||||
* LAMMPS send a "<FORCES" message to ``pw.x`` and waits for the result
|
% mkdir -p build
|
||||||
* ``pw.x`` receives the message (after its computation finishes) and sends a 3*N vector of forces
|
% cd build
|
||||||
* LAMMPS receives the forces and time integrates to complete a single timestep
|
% ../configure --prefix=<install_path>/install
|
||||||
|
% make -j 4
|
||||||
-------------
|
% make install
|
||||||
|
|
||||||
Examples scripts for using LAMMPS as an MDI engine are in the
|
|
||||||
examples/mdi directory. See the README file in that directory for
|
|
||||||
instructions on how to run the examples.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Work is underway to add commands that allow LAMMPS to be used as an
|
|
||||||
MDI driver, e.g. for the AIMD example discussed above. Example
|
|
||||||
scripts for this usage mode will be added the same directory when
|
|
||||||
available.
|
|
||||||
|
|
||||||
If LAMMPS is used as a stand-alone engine it should set up the system
|
|
||||||
it will be modeling in its input script, then invoke the
|
|
||||||
:doc:`mdi/engine <mdi_engine>` command. This will put LAMMPS into
|
|
||||||
"engine mode" where it waits for messages and data from the driver.
|
|
||||||
When the driver sends an "EXIT" command, LAMMPS will exit engine mode
|
|
||||||
and the input script will continue.
|
|
||||||
|
|
||||||
If LAMMPS is used as a plugin engine it operates the same way, except
|
|
||||||
that the driver will pass LAMMPS an input script to initialize itself.
|
|
||||||
Upon receiving the "EXIT" command, LAMMPS will exit engine mode and the
|
|
||||||
input script will continue. After finishing execution of the input
|
|
||||||
script, the instance of LAMMPS will be destroyed.
|
|
||||||
|
|
||||||
LAMMPS supports the full set of MD-appropriate engine commands defined
|
|
||||||
by the MDI library. See the :doc:`mdi/engine <mdi_engine>` page for
|
|
||||||
a list of these.
|
|
||||||
|
|
||||||
If those commands are not sufficient for a user-developed driver to use
|
|
||||||
LAMMPS as an engine, then new commands can be easily added. See these
|
|
||||||
two files which implement the definition of MDI commands and the logic
|
|
||||||
for responding to them:
|
|
||||||
|
|
||||||
* src/MDI/mdi_engine.cpp
|
|
||||||
* src/MDI/fix_mdi_engine.cpp
|
|
||||||
|
|||||||
@ -19,7 +19,7 @@ atoms and the water molecule to run a rigid SPC model.
|
|||||||
| LJ :math:`\sigma` of OO = 3.166
|
| LJ :math:`\sigma` of OO = 3.166
|
||||||
| LJ :math:`\epsilon`, :math:`\sigma` of OH, HH = 0.0
|
| LJ :math:`\epsilon`, :math:`\sigma` of OH, HH = 0.0
|
||||||
| :math:`r_0` of OH bond = 1.0
|
| :math:`r_0` of OH bond = 1.0
|
||||||
| :math:`\theta` of HOH angle = 109.47\ :math:`^{\circ}`
|
| :math:`\theta_0` of HOH angle = 109.47\ :math:`^{\circ}`
|
||||||
|
|
|
|
||||||
|
|
||||||
Note that as originally proposed, the SPC model was run with a 9
|
Note that as originally proposed, the SPC model was run with a 9
|
||||||
|
|||||||
@ -55,6 +55,9 @@ JSON
|
|||||||
YAML format thermo_style output
|
YAML format thermo_style output
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
|
Extracting data from log file
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
.. versionadded:: 24Mar2022
|
.. versionadded:: 24Mar2022
|
||||||
|
|
||||||
LAMMPS supports the thermo style "yaml" and for "custom" style
|
LAMMPS supports the thermo style "yaml" and for "custom" style
|
||||||
@ -66,7 +69,7 @@ the following style:
|
|||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
---
|
---
|
||||||
keywords: [Step, Temp, E_pair, E_mol, TotEng, Press, ]
|
keywords: ['Step', 'Temp', 'E_pair', 'E_mol', 'TotEng', 'Press', ]
|
||||||
data:
|
data:
|
||||||
- [100, 0.757453103239935, -5.7585054860159, 0, -4.62236133677021, 0.207261053624721, ]
|
- [100, 0.757453103239935, -5.7585054860159, 0, -4.62236133677021, 0.207261053624721, ]
|
||||||
- [110, 0.759322359337036, -5.7614668389562, 0, -4.62251889318624, 0.194314975399602, ]
|
- [110, 0.759322359337036, -5.7614668389562, 0, -4.62251889318624, 0.194314975399602, ]
|
||||||
@ -79,6 +82,10 @@ This data can be extracted and parsed from a log file using python with:
|
|||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
import re, yaml
|
import re, yaml
|
||||||
|
try:
|
||||||
|
from yaml import CSafeLoader as Loader
|
||||||
|
except ImportError:
|
||||||
|
from yaml import SafeLoader as Loader
|
||||||
|
|
||||||
docs = ""
|
docs = ""
|
||||||
with open("log.lammps") as f:
|
with open("log.lammps") as f:
|
||||||
@ -86,7 +93,7 @@ This data can be extracted and parsed from a log file using python with:
|
|||||||
m = re.search(r"^(keywords:.*$|data:$|---$|\.\.\.$| - \[.*\]$)", line)
|
m = re.search(r"^(keywords:.*$|data:$|---$|\.\.\.$| - \[.*\]$)", line)
|
||||||
if m: docs += m.group(0) + '\n'
|
if m: docs += m.group(0) + '\n'
|
||||||
|
|
||||||
thermo = list(yaml.load_all(docs, Loader=yaml.SafeLoader))
|
thermo = list(yaml.load_all(docs, Loader=Loader))
|
||||||
|
|
||||||
print("Number of runs: ", len(thermo))
|
print("Number of runs: ", len(thermo))
|
||||||
print(thermo[1]['keywords'][4], ' = ', thermo[1]['data'][2][4])
|
print(thermo[1]['keywords'][4], ' = ', thermo[1]['data'][2][4])
|
||||||
@ -105,6 +112,135 @@ of that run:
|
|||||||
Number of runs: 2
|
Number of runs: 2
|
||||||
TotEng = -4.62140097780047
|
TotEng = -4.62140097780047
|
||||||
|
|
||||||
|
.. versionadded:: 4May2022
|
||||||
|
|
||||||
|
YAML format output has been added to multiple commands in LAMMPS,
|
||||||
|
for example :doc:`dump yaml <dump>` or :doc:`fix ave/time <fix_ave_time>`
|
||||||
|
Depending on the kind of data being written, organization of the data
|
||||||
|
or the specific syntax used may change, but the principles are very
|
||||||
|
similar and all files should be readable with a suitable YAML parser.
|
||||||
|
|
||||||
|
Processing scalar data with Python
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
.. figure:: JPG/thermo_bondeng.png
|
||||||
|
:figwidth: 33%
|
||||||
|
:align: right
|
||||||
|
|
||||||
|
After reading and parsing the YAML format data, it can be easily
|
||||||
|
imported for further processing and visualization with the `pandas
|
||||||
|
<https://pandas.pydata.org/>`_ and `matplotlib
|
||||||
|
<https://matplotlib.org/>`_ Python modules. Because of the organization
|
||||||
|
of the data in the YAML format thermo output, it needs to be told to
|
||||||
|
process only the 'data' part of the imported data to create a pandas
|
||||||
|
data frame, and one needs to set the column names from the 'keywords'
|
||||||
|
entry. The following Python script code example demonstrates this, and
|
||||||
|
creates the image shown on the right of a simple plot of various bonded
|
||||||
|
energy contributions versus the timestep from a run of the 'peptide'
|
||||||
|
example input after changing the :doc:`thermo style <thermo_style>` to
|
||||||
|
'yaml'. The properties to be used for x and y values can be
|
||||||
|
conveniently selected through the keywords. Please note that those
|
||||||
|
keywords can be changed to custom strings with the :doc:`thermo_modify
|
||||||
|
colname <thermo_modify>` command.
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
import re, yaml
|
||||||
|
import pandas as pd
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
try:
|
||||||
|
from yaml import CSafeLoader as Loader
|
||||||
|
except ImportError:
|
||||||
|
from yaml import SafeLoader as Loader
|
||||||
|
|
||||||
|
docs = ""
|
||||||
|
with open("log.lammps") as f:
|
||||||
|
for line in f:
|
||||||
|
m = re.search(r"^(keywords:.*$|data:$|---$|\.\.\.$| - \[.*\]$)", line)
|
||||||
|
if m: docs += m.group(0) + '\n'
|
||||||
|
|
||||||
|
thermo = list(yaml.load_all(docs, Loader=Loader))
|
||||||
|
|
||||||
|
df = pd.DataFrame(data=thermo[0]['data'], columns=thermo[0]['keywords'])
|
||||||
|
fig = df.plot(x='Step', y=['E_bond', 'E_angle', 'E_dihed', 'E_impro'], ylabel='Energy in kcal/mol')
|
||||||
|
plt.savefig('thermo_bondeng.png')
|
||||||
|
|
||||||
|
Processing vector data with Python
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
Global *vector* data as produced by :doc:`fix ave/time <fix_ave_time>`
|
||||||
|
uses a slightly different organization of the data. You still have the
|
||||||
|
dictionary keys 'keywords' and 'data' for the column headers and the
|
||||||
|
data. But the data is a dictionary indexed by the time step and for
|
||||||
|
each step there are multiple rows of values each with a list of the
|
||||||
|
averaged properties. This requires a slightly different processing,
|
||||||
|
since the entire data cannot be directly imported into a single pandas
|
||||||
|
DataFrame class instance. The following Python script example
|
||||||
|
demonstrates how to read such data. The result will combine the data
|
||||||
|
for the different steps into one large "multi-index" table. The pandas
|
||||||
|
IndexSlice class can then be used to select data from this combined data
|
||||||
|
frame.
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
try:
|
||||||
|
from yaml import CSafeLoader as Loader
|
||||||
|
except ImportError:
|
||||||
|
from yaml import SafeLoader as Loader
|
||||||
|
|
||||||
|
with open("ave.yaml") as f:
|
||||||
|
ave = yaml.load(f, Loader=Loader)
|
||||||
|
|
||||||
|
keys = ave['keywords']
|
||||||
|
df = {}
|
||||||
|
for k in ave['data'].keys():
|
||||||
|
df[k] = pd.DataFrame(data=ave['data'][k], columns=keys)
|
||||||
|
|
||||||
|
# create multi-index data frame
|
||||||
|
df = pd.concat(df)
|
||||||
|
|
||||||
|
# output only the first 3 value for steps 200 to 300 of the column Pressure
|
||||||
|
idx = pd.IndexSlice
|
||||||
|
print(df['Pressure'].loc[idx[200:300, 0:2]])
|
||||||
|
|
||||||
|
|
||||||
|
Processing scalar data with Perl
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
The ease of processing YAML data is not limited to Python. Here is an
|
||||||
|
example for extracting and processing a LAMMPS log file with Perl instead.
|
||||||
|
|
||||||
|
.. code-block:: perl
|
||||||
|
|
||||||
|
use YAML::XS;
|
||||||
|
|
||||||
|
open(LOG, "log.lammps") or die("could not open log.lammps: $!");
|
||||||
|
my $file = "";
|
||||||
|
while(my $line = <LOG>) {
|
||||||
|
if ($line =~ /^(keywords:.*$|data:$|---$|\.\.\.$| - \[.*\]$)/) {
|
||||||
|
$file .= $line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(LOG);
|
||||||
|
|
||||||
|
# convert YAML to perl as nested hash and array references
|
||||||
|
my $thermo = Load $file;
|
||||||
|
|
||||||
|
# convert references to real arrays
|
||||||
|
my @keywords = @{$thermo->{'keywords'}};
|
||||||
|
my @data = @{$thermo->{'data'}};
|
||||||
|
|
||||||
|
# print first two columns
|
||||||
|
print("$keywords[0] $keywords[1]\n");
|
||||||
|
foreach (@data) {
|
||||||
|
print("${$_}[0] ${$_}[1]\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Writing continuous data during a simulation
|
Writing continuous data during a simulation
|
||||||
===========================================
|
===========================================
|
||||||
|
|
||||||
|
|||||||
@ -68,7 +68,8 @@ liquid Ar via the GK formalism:
|
|||||||
# Sample LAMMPS input script for viscosity of liquid Ar
|
# Sample LAMMPS input script for viscosity of liquid Ar
|
||||||
|
|
||||||
units real
|
units real
|
||||||
variable T equal 86.4956
|
variable T equal 200.0 # run temperature
|
||||||
|
variable Tinit equal 250.0 # equilibration temperature
|
||||||
variable V equal vol
|
variable V equal vol
|
||||||
variable dt equal 4.0
|
variable dt equal 4.0
|
||||||
variable p equal 400 # correlation length
|
variable p equal 400 # correlation length
|
||||||
@ -99,12 +100,14 @@ liquid Ar via the GK formalism:
|
|||||||
|
|
||||||
# equilibration and thermalization
|
# equilibration and thermalization
|
||||||
|
|
||||||
velocity all create $T 102486 mom yes rot yes dist gaussian
|
velocity all create ${Tinit} 102486 mom yes rot yes dist gaussian
|
||||||
fix NVT all nvt temp $T $T 10 drag 0.2
|
fix NVT all nvt temp ${Tinit} ${Tinit} 10 drag 0.2
|
||||||
run 8000
|
run 8000
|
||||||
|
|
||||||
# viscosity calculation, switch to NVE if desired
|
# viscosity calculation, switch to NVE if desired
|
||||||
|
|
||||||
|
velocity all create $T 102486 mom yes rot yes dist gaussian
|
||||||
|
fix NVT all nvt temp $T $T 10 drag 0.2
|
||||||
#unfix NVT
|
#unfix NVT
|
||||||
#fix NVE all nve
|
#fix NVE all nve
|
||||||
|
|
||||||
@ -122,7 +125,7 @@ liquid Ar via the GK formalism:
|
|||||||
run 100000
|
run 100000
|
||||||
variable v equal (v_v11+v_v22+v_v33)/3.0
|
variable v equal (v_v11+v_v22+v_v33)/3.0
|
||||||
variable ndens equal count(all)/vol
|
variable ndens equal count(all)/vol
|
||||||
print "average viscosity: $v [Pa.s] @ $T K, ${ndens} /A^3"
|
print "average viscosity: $v [Pa.s] @ $T K, ${ndens} atoms/A^3"
|
||||||
|
|
||||||
The fifth method is related to the above Green-Kubo method,
|
The fifth method is related to the above Green-Kubo method,
|
||||||
but uses the Einstein formulation, analogous to the Einstein
|
but uses the Einstein formulation, analogous to the Einstein
|
||||||
@ -131,9 +134,9 @@ time-integrated momentum fluxes play the role of Cartesian
|
|||||||
coordinates, whose mean-square displacement increases linearly
|
coordinates, whose mean-square displacement increases linearly
|
||||||
with time at sufficiently long times.
|
with time at sufficiently long times.
|
||||||
|
|
||||||
The sixth is periodic perturbation method. It is also a non-equilibrium MD method.
|
The sixth is the periodic perturbation method, which is also a non-equilibrium MD method.
|
||||||
However, instead of measure the momentum flux in response of applied velocity gradient,
|
However, instead of measuring the momentum flux in response to an applied velocity gradient,
|
||||||
it measures the velocity profile in response of applied stress.
|
it measures the velocity profile in response to applied stress.
|
||||||
A cosine-shaped periodic acceleration is added to the system via the
|
A cosine-shaped periodic acceleration is added to the system via the
|
||||||
:doc:`fix accelerate/cos <fix_accelerate_cos>` command,
|
:doc:`fix accelerate/cos <fix_accelerate_cos>` command,
|
||||||
and the :doc:`compute viscosity/cos<compute_viscosity_cos>` command is used to monitor the
|
and the :doc:`compute viscosity/cos<compute_viscosity_cos>` command is used to monitor the
|
||||||
|
|||||||
@ -3,10 +3,20 @@ Install LAMMPS
|
|||||||
|
|
||||||
You can download LAMMPS as an executable or as source code.
|
You can download LAMMPS as an executable or as source code.
|
||||||
|
|
||||||
With source code, you also have to :doc:`build LAMMPS <Build>`. But you
|
When downloading the LAMMPS source code, you also have to :doc:`build
|
||||||
have more flexibility as to what features to include or exclude in the
|
LAMMPS <Build>`. But you have more flexibility as to what features to
|
||||||
build. If you plan to :doc:`modify or extend LAMMPS <Modify>`, then you
|
include or exclude in the build. When you download and install
|
||||||
need the source code.
|
pre-compiled LAMMPS executables, you are limited to install which
|
||||||
|
version of LAMMPS is available and which features are included of these
|
||||||
|
builds. If you plan to :doc:`modify or extend LAMMPS <Modify>`, then
|
||||||
|
you **must** build LAMMPS from the source code.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
If you have questions about the pre-compiled LAMMPS executables, you
|
||||||
|
need to contact the people preparing those executables. The LAMMPS
|
||||||
|
developers have no control over their choices of how they configure
|
||||||
|
and build their packages and when they update them.
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|||||||
@ -38,3 +38,10 @@ up the Conda capability.
|
|||||||
.. _openkim: https://openkim.org
|
.. _openkim: https://openkim.org
|
||||||
.. _conda: https://docs.conda.io/en/latest/index.html
|
.. _conda: https://docs.conda.io/en/latest/index.html
|
||||||
.. _mini_conda_install: https://docs.conda.io/en/latest/miniconda.html
|
.. _mini_conda_install: https://docs.conda.io/en/latest/miniconda.html
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
If you have questions about these pre-compiled LAMMPS executables,
|
||||||
|
you need to contact the people preparing those packages. The LAMMPS
|
||||||
|
developers have no control over their choices of how they configure
|
||||||
|
and build their packages and when they update them.
|
||||||
|
|||||||
@ -3,13 +3,19 @@ Download an executable for Linux
|
|||||||
|
|
||||||
Binaries are available for different versions of Linux:
|
Binaries are available for different versions of Linux:
|
||||||
|
|
||||||
| :ref:`Pre-built Ubuntu Linux executables <ubuntu>`
|
- :ref:`Pre-built Ubuntu Linux executables <ubuntu>`
|
||||||
| :ref:`Pre-built Fedora Linux executables <fedora>`
|
- :ref:`Pre-built Fedora Linux executables <fedora>`
|
||||||
| :ref:`Pre-built EPEL Linux executables (RHEL, CentOS) <epel>`
|
- :ref:`Pre-built EPEL Linux executables (RHEL, CentOS) <epel>`
|
||||||
| :ref:`Pre-built OpenSuse Linux executables <opensuse>`
|
- :ref:`Pre-built OpenSuse Linux executables <opensuse>`
|
||||||
| :ref:`Gentoo Linux executable <gentoo>`
|
- :ref:`Gentoo Linux executable <gentoo>`
|
||||||
| :ref:`Arch Linux build-script <arch>`
|
- :ref:`Arch Linux build-script <arch>`
|
||||||
|
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
If you have questions about these pre-compiled LAMMPS executables,
|
||||||
|
you need to contact the people preparing those packages. The LAMMPS
|
||||||
|
developers have no control over their choices of how they configure
|
||||||
|
and build their packages and when they update them.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
@ -18,41 +24,28 @@ Binaries are available for different versions of Linux:
|
|||||||
Pre-built Ubuntu Linux executables
|
Pre-built Ubuntu Linux executables
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
A pre-built LAMMPS executable suitable for running on the latest
|
A pre-built LAMMPS executable suitable for running on the latest Ubuntu
|
||||||
Ubuntu Linux versions, can be downloaded as a Debian package. This
|
Linux versions, can be downloaded as a Debian package. This allows you
|
||||||
allows you to install LAMMPS with a single command, and stay
|
to install LAMMPS with a single command, and stay (mostly) up-to-date
|
||||||
up-to-date with the current stable version of LAMMPS by simply updating
|
with the current stable version of LAMMPS by simply updating your
|
||||||
your operating system. Please note, that the repository below offers
|
operating system.
|
||||||
two LAMMPS packages, ``lammps-daily`` and ``lammps-stable``. The
|
|
||||||
LAMMPS developers recommend to use the ``lammps-stable`` package for
|
|
||||||
any production simulations. The ``lammps-daily`` package is built
|
|
||||||
from the LAMMPS development sources, and those versions may have known
|
|
||||||
issues and bugs when new features are added and the software has not
|
|
||||||
undergone full release testing.
|
|
||||||
|
|
||||||
To install the appropriate personal-package archives (PPAs), do the
|
|
||||||
following once:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
$ sudo add-apt-repository ppa:gladky-anton/lammps
|
|
||||||
$ sudo add-apt-repository ppa:openkim/latest
|
|
||||||
$ sudo apt-get update
|
|
||||||
|
|
||||||
To install LAMMPS do the following once:
|
To install LAMMPS do the following once:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
$ sudo apt-get install lammps-stable
|
$ sudo apt-get install lammps
|
||||||
|
|
||||||
This downloads an executable named ``lmp_stable`` to your box, which
|
This downloads an executable named ``lmp`` to your box and multiple
|
||||||
can then be used in the usual way to run input scripts:
|
packages with supporting data, examples and libraries as well as any
|
||||||
|
missing dependencies. This executable can then be used in the usual way
|
||||||
|
to run input scripts:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
$ lmp_stable -in in.lj
|
$ lmp -in in.lj
|
||||||
|
|
||||||
To update LAMMPS to the most current stable version, do the following:
|
To update LAMMPS to the latest packaged version, do the following:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
@ -60,44 +53,24 @@ To update LAMMPS to the most current stable version, do the following:
|
|||||||
|
|
||||||
which will also update other packages on your system.
|
which will also update other packages on your system.
|
||||||
|
|
||||||
To get a copy of the current documentation and examples:
|
The ``lmp`` binary is built with the :ref:`KIM package <kim>` included,
|
||||||
|
which results in the above command also installing the ``kim-api``
|
||||||
.. code-block:: bash
|
binaries when LAMMPS is installed. In order to use potentials from
|
||||||
|
`openkim.org <openkim_>`_, you can also install the ``openkim-models``
|
||||||
$ sudo apt-get install lammps-stable-doc
|
package
|
||||||
|
|
||||||
which will download the doc files in
|
|
||||||
``/usr/share/doc/lammps-stable-doc/doc`` and example problems in
|
|
||||||
``/usr/share/doc/lammps-doc/examples``.
|
|
||||||
|
|
||||||
To get a copy of the current potentials files:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
$ sudo apt-get install lammps-stable-data
|
|
||||||
|
|
||||||
which will download the potentials files to
|
|
||||||
``/usr/share/lammps-stable/potentials``. The ``lmp_stable`` binary is
|
|
||||||
hard-coded to look for potential files in this directory (it does not
|
|
||||||
use the ``LAMMPS_POTENTIALS`` environment variable, as described
|
|
||||||
in :doc:`pair_coeff <pair_coeff>` command).
|
|
||||||
|
|
||||||
The ``lmp_stable`` binary is built with the :ref:`KIM package <kim>` which
|
|
||||||
results in the above command also installing the ``kim-api`` binaries when LAMMPS
|
|
||||||
is installed. In order to use potentials from `openkim.org <openkim_>`_, you
|
|
||||||
can install the ``openkim-models`` package
|
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
$ sudo apt-get install openkim-models
|
$ sudo apt-get install openkim-models
|
||||||
|
|
||||||
|
Or use the KIM-API commands to download and install individual models.
|
||||||
To un-install LAMMPS, do the following:
|
To un-install LAMMPS, do the following:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
$ sudo apt-get remove lammps-stable
|
$ sudo apt-get remove lammps
|
||||||
|
|
||||||
Please use ``lmp_stable -help`` to see which compilation options, packages,
|
Please use ``lmp -help`` to see which compilation options, packages,
|
||||||
and styles are included in the binary.
|
and styles are included in the binary.
|
||||||
|
|
||||||
Thanks to Anton Gladky (gladky.anton at gmail.com) for setting up this
|
Thanks to Anton Gladky (gladky.anton at gmail.com) for setting up this
|
||||||
@ -110,21 +83,21 @@ Ubuntu package capability.
|
|||||||
Pre-built Fedora Linux executables
|
Pre-built Fedora Linux executables
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Pre-built LAMMPS packages for stable releases are available
|
Pre-built LAMMPS packages for stable releases are available in the
|
||||||
in the Fedora Linux distribution as of version 28. The packages
|
Fedora Linux distribution as of Fedora version 28. The packages can be
|
||||||
can be installed via the dnf package manager. There are 3 basic
|
installed via the dnf package manager. There are 3 basic varieties
|
||||||
varieties (lammps = no MPI, lammps-mpich = MPICH MPI library,
|
(lammps = no MPI, lammps-mpich = MPICH MPI library, lammps-openmpi =
|
||||||
lammps-openmpi = OpenMPI MPI library) and for each support for
|
OpenMPI MPI library) and for each support for linking to the C library
|
||||||
linking to the C library interface (lammps-devel, lammps-mpich-devel,
|
interface (lammps-devel, lammps-mpich-devel, lammps-openmpi-devel), the
|
||||||
lammps-openmpi-devel), the header for compiling programs using
|
header for compiling programs using the C library interface
|
||||||
the C library interface (lammps-headers), and the LAMMPS python
|
(lammps-headers), and the LAMMPS python module for Python 3. All
|
||||||
module for Python 3. All packages can be installed at the same
|
packages can be installed at the same time and the name of the LAMMPS
|
||||||
time and the name of the LAMMPS executable is ``lmp`` and ``lmp_openmpi``
|
executable is ``lmp`` and ``lmp_openmpi`` or ``lmp_mpich`` respectively.
|
||||||
or ``lmp_mpich`` respectively. By default, ``lmp`` will refer to the
|
By default, ``lmp`` will refer to the serial executable, unless one of
|
||||||
serial executable, unless one of the MPI environment modules is loaded
|
the MPI environment modules is loaded (``module load mpi/mpich-x86_64``
|
||||||
(``module load mpi/mpich-x86_64`` or ``module load mpi/openmpi-x86_64``).
|
or ``module load mpi/openmpi-x86_64``). Then the corresponding parallel
|
||||||
Then the corresponding parallel LAMMPS executable can be used.
|
LAMMPS executable can be used. The same mechanism applies when loading
|
||||||
The same mechanism applies when loading the LAMMPS python module.
|
the LAMMPS python module.
|
||||||
|
|
||||||
To install LAMMPS with OpenMPI and run an input ``in.lj`` with 2 CPUs do:
|
To install LAMMPS with OpenMPI and run an input ``in.lj`` with 2 CPUs do:
|
||||||
|
|
||||||
@ -273,3 +246,10 @@ Alternatively, you may use an AUR helper to install these packages.
|
|||||||
|
|
||||||
Note that the AUR provides build-scripts that download the source and
|
Note that the AUR provides build-scripts that download the source and
|
||||||
the build the package on your machine.
|
the build the package on your machine.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
It looks like the Arch Linux AUR repository build scripts for LAMMPS
|
||||||
|
have not been updated since the 29 October 2020 version. You may want
|
||||||
|
to consider installing a more current version of LAMMPS from source
|
||||||
|
directly.
|
||||||
|
|||||||
@ -5,7 +5,7 @@ LAMMPS can be downloaded, built, and configured for OS X on a Mac with
|
|||||||
`Homebrew <homebrew_>`_. (Alternatively, see the install instructions for
|
`Homebrew <homebrew_>`_. (Alternatively, see the install instructions for
|
||||||
:doc:`Download an executable via Conda <Install_conda>`.) The following LAMMPS
|
:doc:`Download an executable via Conda <Install_conda>`.) The following LAMMPS
|
||||||
packages are unavailable at this time because of additional needs not yet met:
|
packages are unavailable at this time because of additional needs not yet met:
|
||||||
GPU, KOKKOS, LATTE, MSCG, MESSAGE, MPIIO POEMS VORONOI.
|
GPU, KOKKOS, LATTE, MSCG, MPIIO, POEMS, VORONOI.
|
||||||
|
|
||||||
After installing Homebrew, you can install LAMMPS on your system with
|
After installing Homebrew, you can install LAMMPS on your system with
|
||||||
the following commands:
|
the following commands:
|
||||||
|
|||||||
@ -6,7 +6,7 @@ of the `LAMMPS website <lws_>`_.
|
|||||||
|
|
||||||
.. _download: https://www.lammps.org/download.html
|
.. _download: https://www.lammps.org/download.html
|
||||||
.. _bug: https://www.lammps.org/bug.html
|
.. _bug: https://www.lammps.org/bug.html
|
||||||
.. _older: https://www.lammps.org/tars
|
.. _older: https://download.lammps.org/tars/
|
||||||
.. _lws: https://www.lammps.org
|
.. _lws: https://www.lammps.org
|
||||||
|
|
||||||
You have two choices of tarballs, either the most recent stable
|
You have two choices of tarballs, either the most recent stable
|
||||||
|
|||||||
@ -30,11 +30,11 @@ initial versions of LAMMPS is:
|
|||||||
`S. Plimpton, Fast Parallel Algorithms for Short-Range Molecular Dynamics, J Comp Phys, 117, 1-19 (1995). <http://www.sandia.gov/~sjplimp/papers/jcompphys95.pdf>`_
|
`S. Plimpton, Fast Parallel Algorithms for Short-Range Molecular Dynamics, J Comp Phys, 117, 1-19 (1995). <http://www.sandia.gov/~sjplimp/papers/jcompphys95.pdf>`_
|
||||||
|
|
||||||
|
|
||||||
DOI for the LAMMPS code
|
DOI for the LAMMPS source code
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
LAMMPS developers use the `Zenodo service at CERN <https://zenodo.org/>`_
|
The LAMMPS developers use the `Zenodo service at CERN <https://zenodo.org/>`_
|
||||||
to create digital object identifies (DOI) for stable releases of the
|
to create digital object identifiers (DOI) for stable releases of the
|
||||||
LAMMPS source code. There are two types of DOIs for the LAMMPS source code.
|
LAMMPS source code. There are two types of DOIs for the LAMMPS source code.
|
||||||
|
|
||||||
The canonical DOI for **all** versions of LAMMPS, which will always
|
The canonical DOI for **all** versions of LAMMPS, which will always
|
||||||
@ -46,7 +46,7 @@ In addition there are DOIs for individual stable releases. Currently there are:
|
|||||||
|
|
||||||
- 3 March 2020 version: `DOI:10.5281/zenodo.3726417 <https://dx.doi.org/10.5281/zenodo.3726417>`_
|
- 3 March 2020 version: `DOI:10.5281/zenodo.3726417 <https://dx.doi.org/10.5281/zenodo.3726417>`_
|
||||||
- 29 October 2020 version: `DOI:10.5281/zenodo.4157471 <https://dx.doi.org/10.5281/zenodo.4157471>`_
|
- 29 October 2020 version: `DOI:10.5281/zenodo.4157471 <https://dx.doi.org/10.5281/zenodo.4157471>`_
|
||||||
|
- 29 September 2021 version: `DOI:10.5281/zenodo.6386596 <https//dx.doi.org/10.5281/zenodo.6386596>`_
|
||||||
|
|
||||||
Home page
|
Home page
|
||||||
^^^^^^^^^
|
^^^^^^^^^
|
||||||
|
|||||||
@ -20,7 +20,6 @@ available online are listed below.
|
|||||||
* `Glossary of terms relevant to LAMMPS <https://www.lammps.org/glossary.html>`_
|
* `Glossary of terms relevant to LAMMPS <https://www.lammps.org/glossary.html>`_
|
||||||
* `LAMMPS highlights with images <https://www.lammps.org/pictures.html>`_
|
* `LAMMPS highlights with images <https://www.lammps.org/pictures.html>`_
|
||||||
* `LAMMPS highlights with movies <https://www.lammps.org/movies.html>`_
|
* `LAMMPS highlights with movies <https://www.lammps.org/movies.html>`_
|
||||||
* `Mailing list <https://www.lammps.org/mail.html>`_
|
|
||||||
* `LAMMPS forum <https://www.lammps.org/forum.html>`_
|
* `LAMMPS forum <https://www.lammps.org/forum.html>`_
|
||||||
* `Workshops <https://www.lammps.org/workshops.html>`_
|
* `Workshops <https://www.lammps.org/workshops.html>`_
|
||||||
* `Tutorials <https://www.lammps.org/tutorials.html>`_
|
* `Tutorials <https://www.lammps.org/tutorials.html>`_
|
||||||
|
|||||||
BIN
doc/src/JPG/thermo_bondeng.png
Normal file
BIN
doc/src/JPG/thermo_bondeng.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user