Merging with develop
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
|
||||||
|
|||||||
6
.github/CODEOWNERS
vendored
6
.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
|
||||||
@ -133,6 +134,7 @@ tools/coding_standard/* @rbberger
|
|||||||
tools/valgrind/* @akohlmey
|
tools/valgrind/* @akohlmey
|
||||||
tools/swig/* @akohlmey
|
tools/swig/* @akohlmey
|
||||||
tools/offline/* @rbberger
|
tools/offline/* @rbberger
|
||||||
|
tools/vim/* @hammondkd
|
||||||
|
|
||||||
# tests
|
# tests
|
||||||
unittest/* @akohlmey @rbberger
|
unittest/* @akohlmey @rbberger
|
||||||
|
|||||||
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
|
||||||
|
|||||||
12
.github/workflows/compile-msvc.yml
vendored
12
.github/workflows/compile-msvc.yml
vendored
@ -3,7 +3,13 @@ name: "Native Windows Compilation and Unit Tests"
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [develop]
|
branches:
|
||||||
|
- develop
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- develop
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@ -13,12 +19,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'
|
||||||
|
|
||||||
|
|||||||
103
.github/workflows/coverity.yml
vendored
Normal file
103
.github/workflows/coverity.yml
vendored
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
name: "Run Coverity Scan"
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * FRI"
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
if: ${{ github.repository == 'lammps/lammps' }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: lammps/buildenv:ubuntu20.04
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
|
||||||
|
- name: Create Build and Download Folder
|
||||||
|
run: mkdir build download
|
||||||
|
|
||||||
|
- name: Cache Coverity
|
||||||
|
id: cache-coverity
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: ./download/
|
||||||
|
key: ${{ runner.os }}-download-${{ hashFiles('**/coverity_tool.*') }}
|
||||||
|
|
||||||
|
- name: Download Coverity if necessary
|
||||||
|
if: steps.cache-coverity.outputs.cache-hit != 'true'
|
||||||
|
working-directory: download
|
||||||
|
run: |
|
||||||
|
wget -nv https://scan.coverity.com/download/linux64 --post-data "token=${{ secrets.COVERITY_TOKEN }}&project=LAMMPS" -O coverity_tool.tgz
|
||||||
|
wget -nv https://scan.coverity.com/download/linux64 --post-data "token=${{ secrets.COVERITY_TOKEN }}&project=LAMMPS&md5=1" -O coverity_tool.md5
|
||||||
|
echo " coverity_tool.tgz" >> coverity_tool.md5
|
||||||
|
md5sum -c coverity_tool.md5
|
||||||
|
|
||||||
|
- name: Setup Coverity
|
||||||
|
run: |
|
||||||
|
tar xzf download/coverity_tool.tgz
|
||||||
|
ln -s cov-analysis-linux64-* coverity
|
||||||
|
|
||||||
|
- name: Configure LAMMPS via CMake
|
||||||
|
shell: bash
|
||||||
|
working-directory: build
|
||||||
|
run: |
|
||||||
|
cmake \
|
||||||
|
-C ../cmake/presets/clang.cmake \
|
||||||
|
-C ../cmake/presets/most.cmake \
|
||||||
|
-C ../cmake/presets/kokkos-openmp.cmake \
|
||||||
|
-D CMAKE_BUILD_TYPE="RelWithDebug" \
|
||||||
|
-D CMAKE_TUNE_FLAGS="-Wall -Wextra -Wno-unused-result" \
|
||||||
|
-D BUILD_MPI=on \
|
||||||
|
-D BUILD_OMP=on \
|
||||||
|
-D BUILD_SHARED_LIBS=on \
|
||||||
|
-D LAMMPS_SIZES=SMALLBIG \
|
||||||
|
-D LAMMPS_EXCEPTIONS=off \
|
||||||
|
-D PKG_MESSAGE=on \
|
||||||
|
-D PKG_MPIIO=on \
|
||||||
|
-D PKG_ATC=on \
|
||||||
|
-D PKG_AWPMD=on \
|
||||||
|
-D PKG_BOCS=on \
|
||||||
|
-D PKG_EFF=on \
|
||||||
|
-D PKG_H5MD=on \
|
||||||
|
-D PKG_INTEL=on \
|
||||||
|
-D PKG_LATBOLTZ=on \
|
||||||
|
-D PKG_MANIFOLD=on \
|
||||||
|
-D PKG_MGPT=on \
|
||||||
|
-D PKG_ML-PACE=on \
|
||||||
|
-D PKG_ML-RANN=on \
|
||||||
|
-D PKG_MOLFILE=on \
|
||||||
|
-D PKG_NETCDF=on \
|
||||||
|
-D PKG_PTM=on \
|
||||||
|
-D PKG_QTB=on \
|
||||||
|
-D PKG_SMTBQ=on \
|
||||||
|
-D PKG_TALLY=on \
|
||||||
|
../cmake
|
||||||
|
|
||||||
|
- name: Run Coverity Scan
|
||||||
|
shell: bash
|
||||||
|
working-directory: build
|
||||||
|
run: |
|
||||||
|
export PATH=$GITHUB_WORKSPACE/coverity/bin:$PATH
|
||||||
|
cov-build --dir cov-int cmake --build . --parallel 2
|
||||||
|
|
||||||
|
- name: Create tarball with scan results
|
||||||
|
shell: bash
|
||||||
|
working-directory: build
|
||||||
|
run: tar czf lammps.tgz cov-int
|
||||||
|
|
||||||
|
- name: Upload scan result to Coverity
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
curl --form token=${{ secrets.COVERITY_TOKEN }} \
|
||||||
|
--form email=${{ secrets.COVERITY_EMAIL }} \
|
||||||
|
--form file=@build/lammps.tgz \
|
||||||
|
--form version=${{ github.sha }} \
|
||||||
|
--form description="LAMMPS automated build" \
|
||||||
|
https://scan.coverity.com/builds?project=LAMMPS
|
||||||
13
.github/workflows/unittest-macos.yml
vendored
13
.github/workflows/unittest-macos.yml
vendored
@ -3,7 +3,13 @@ name: "Unittest for MacOS"
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [develop]
|
branches:
|
||||||
|
- develop
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- develop
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@ -15,7 +21,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 +32,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 +43,7 @@ jobs:
|
|||||||
working-directory: build
|
working-directory: build
|
||||||
run: |
|
run: |
|
||||||
ccache -z
|
ccache -z
|
||||||
|
python3 -m pip install numpy
|
||||||
python3 -m pip install pyyaml
|
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 \
|
||||||
|
|||||||
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
README
4
README
@ -16,8 +16,8 @@ National Laboratories, a US Department of Energy facility, with
|
|||||||
funding from the DOE. It is an open-source code, distributed freely
|
funding from the DOE. It is an open-source code, distributed freely
|
||||||
under the terms of the GNU Public License (GPL) version 2.
|
under the terms of the GNU Public License (GPL) version 2.
|
||||||
|
|
||||||
The primary author of the code is Steve Plimpton, who can be emailed
|
The code is maintained by the LAMMPS development team who can be emailed
|
||||||
at sjplimp@sandia.gov. The LAMMPS WWW Site at www.lammps.org has
|
at developers@lammps.org. The LAMMPS WWW Site at www.lammps.org has
|
||||||
more information about the code and its uses.
|
more information about the code and its uses.
|
||||||
|
|
||||||
The LAMMPS distribution includes the following files and directories:
|
The LAMMPS distribution includes the following files and directories:
|
||||||
|
|||||||
30
SECURITY.md
30
SECURITY.md
@ -14,14 +14,14 @@ and tested by the LAMMPS developers, so it is easy to import bad
|
|||||||
behavior from calling functions in one of those libraries.
|
behavior from calling functions in one of those libraries.
|
||||||
|
|
||||||
Thus is is quite easy to crash LAMMPS through malicious input and do all
|
Thus is is quite easy to crash LAMMPS through malicious input and do all
|
||||||
kinds of filesystem manipulations. And because of that LAMMPS should
|
kinds of file system manipulations. And because of that LAMMPS should
|
||||||
**NEVER** be compiled or **run** as superuser, either from a "root" or
|
**NEVER** be compiled or **run** as superuser, either from a "root" or
|
||||||
"administrator" account directly or indirectly via "sudo" or "su".
|
"administrator" account directly or indirectly via "sudo" or "su".
|
||||||
|
|
||||||
Therefore what could be seen as a security vulnerability is usually
|
Therefore what could be seen as a security vulnerability is usually
|
||||||
either a user mistake or a bug in the code. Bugs can be reported in
|
either a user mistake or a bug in the code. Bugs can be reported in the
|
||||||
the LAMMPS project
|
LAMMPS project [issue tracker on
|
||||||
[issue tracker on GitHub](https://github.com/lammps/lammps/issues).
|
GitHub](https://github.com/lammps/lammps/issues).
|
||||||
|
|
||||||
To mitigate issues with using homoglyphs or bidirectional reordering in
|
To mitigate issues with using homoglyphs or bidirectional reordering in
|
||||||
unicode, which have been demonstrated as a vector to obfuscate and hide
|
unicode, which have been demonstrated as a vector to obfuscate and hide
|
||||||
@ -30,10 +30,18 @@ for unicode characters and only all-ASCII source code is accepted.
|
|||||||
|
|
||||||
# Version Updates
|
# Version Updates
|
||||||
|
|
||||||
LAMMPS follows continuous release development model. We aim to keep all
|
LAMMPS follows continuous release development model. We aim to keep to
|
||||||
release versions (stable or patch) fully functional and employ a variety
|
keep the development version (develop branch) always fully functional
|
||||||
of automatic testing procedures to detect failures of existing
|
and employ a variety of automatic testing procedures to detect failures
|
||||||
functionality from adding new features before releases are made. Thus
|
of existing functionality from adding or modifying features. Most of
|
||||||
bugfixes and updates are only integrated into the current development
|
those tests are run on pull requests *before* merging to the development
|
||||||
branch and thus the next (patch) release and users are recommended to
|
branch. The develop branch is protected, so all changes *must* be
|
||||||
update regularly.
|
submitted as a pull request and thus cannot avoid the automated tests.
|
||||||
|
|
||||||
|
Additional tests are run *after* merging. Before releases are made
|
||||||
|
*all* tests must have cleared. Then a release tag is applied and the
|
||||||
|
release branch fast-forwarded to that tag. Bug fixes and updates are
|
||||||
|
applied to the current development branch and thus will be available in
|
||||||
|
the next (patch) release. For stable releases, selected bug fixes are
|
||||||
|
back-ported and occasionally published as update releases. There are
|
||||||
|
only updates to the latest stable release.
|
||||||
|
|||||||
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
|
||||||
@ -7,11 +7,20 @@ cmake_minimum_required(VERSION 3.10)
|
|||||||
if(POLICY CMP0074)
|
if(POLICY CMP0074)
|
||||||
cmake_policy(SET CMP0074 NEW)
|
cmake_policy(SET CMP0074 NEW)
|
||||||
endif()
|
endif()
|
||||||
|
# set policy to silence warnings about ignoring ${CMAKE_REQUIRED_LIBRARIES} but use it
|
||||||
|
if(POLICY CMP0075)
|
||||||
|
cmake_policy(SET CMP0075 NEW)
|
||||||
|
endif()
|
||||||
# set policy to silence warnings about missing executable permissions in
|
# set policy to silence warnings about missing executable permissions in
|
||||||
# pythonx.y-config when cross-compiling. review occasionally if it may be set to NEW
|
# pythonx.y-config when cross-compiling. review occasionally if it may be set to NEW
|
||||||
if(POLICY CMP0109)
|
if(POLICY CMP0109)
|
||||||
cmake_policy(SET CMP0109 OLD)
|
cmake_policy(SET CMP0109 OLD)
|
||||||
endif()
|
endif()
|
||||||
|
# set policy to silence warnings about timestamps of downloaded files. review occasionally if it may be set to NEW
|
||||||
|
if(POLICY CMP0135)
|
||||||
|
cmake_policy(SET CMP0135 OLD)
|
||||||
|
endif()
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
|
|
||||||
project(lammps CXX)
|
project(lammps CXX)
|
||||||
@ -100,13 +109,33 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
|||||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4)
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4)
|
||||||
set(CMAKE_TUNE_DEFAULT "-xCOMMON-AVX512")
|
set(CMAKE_TUNE_DEFAULT "-xCOMMON-AVX512")
|
||||||
else()
|
else()
|
||||||
set(CMAKE_TUNE_DEFAULT "-xHost")
|
set(CMAKE_TUNE_DEFAULT "-xHost -fp-model fast=2 -no-prec-div -qoverride-limits -diag-disable=10441 -diag-disable=2196")
|
||||||
endif()
|
endif()
|
||||||
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 +144,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)
|
||||||
add_compile_options(/Zc:__cplusplus)
|
if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Intel"))
|
||||||
add_compile_options(/wd4244)
|
add_compile_options(/Zc:__cplusplus)
|
||||||
add_compile_options(/wd4267)
|
add_compile_options(/wd4244)
|
||||||
|
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 +161,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 +186,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,6 +214,7 @@ option(CMAKE_VERBOSE_MAKEFILE "Generate verbose Makefiles" OFF)
|
|||||||
|
|
||||||
set(STANDARD_PACKAGES
|
set(STANDARD_PACKAGES
|
||||||
ADIOS
|
ADIOS
|
||||||
|
AMOEBA
|
||||||
ASPHERE
|
ASPHERE
|
||||||
ATC
|
ATC
|
||||||
AWPMD
|
AWPMD
|
||||||
@ -175,7 +223,7 @@ set(STANDARD_PACKAGES
|
|||||||
BPM
|
BPM
|
||||||
BROWNIAN
|
BROWNIAN
|
||||||
CG-DNA
|
CG-DNA
|
||||||
CG-SDK
|
CG-SPICA
|
||||||
CLASS2
|
CLASS2
|
||||||
COLLOID
|
COLLOID
|
||||||
COLVARS
|
COLVARS
|
||||||
@ -189,6 +237,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
|
||||||
@ -307,7 +356,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,16 +379,19 @@ 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)
|
||||||
|
pkg_depends(EXTRA-MOLECULE MOLECULE)
|
||||||
|
|
||||||
# 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)
|
||||||
find_package(OpenMP QUIET)
|
find_package(OpenMP COMPONENTS CXX QUIET)
|
||||||
if(OpenMP_FOUND)
|
if(OpenMP_CXX_FOUND)
|
||||||
check_include_file_cxx(omp.h HAVE_OMP_H_INCLUDE)
|
check_omp_h_include()
|
||||||
if(HAVE_OMP_H_INCLUDE)
|
if(HAVE_OMP_H_INCLUDE)
|
||||||
set(BUILD_OMP_DEFAULT ON)
|
set(BUILD_OMP_DEFAULT ON)
|
||||||
endif()
|
endif()
|
||||||
@ -346,8 +400,8 @@ endif()
|
|||||||
option(BUILD_OMP "Build with OpenMP support" ${BUILD_OMP_DEFAULT})
|
option(BUILD_OMP "Build with OpenMP support" ${BUILD_OMP_DEFAULT})
|
||||||
|
|
||||||
if(BUILD_OMP)
|
if(BUILD_OMP)
|
||||||
find_package(OpenMP REQUIRED)
|
find_package(OpenMP COMPONENTS CXX REQUIRED)
|
||||||
check_include_file_cxx(omp.h HAVE_OMP_H_INCLUDE)
|
check_omp_h_include()
|
||||||
if(NOT 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")
|
message(FATAL_ERROR "Cannot find the 'omp.h' header file required for full OpenMP support")
|
||||||
endif()
|
endif()
|
||||||
@ -369,11 +423,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)
|
||||||
find_package(LAPACK)
|
if (NOT USE_INTERNAL_LINALG)
|
||||||
find_package(BLAS)
|
find_package(LAPACK)
|
||||||
if(NOT LAPACK_FOUND OR NOT BLAS_FOUND)
|
find_package(BLAS)
|
||||||
|
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")
|
||||||
@ -468,6 +524,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 +629,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 +658,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()
|
||||||
@ -670,18 +731,17 @@ list(FIND LANGUAGES "Fortran" _index)
|
|||||||
if(_index GREATER -1)
|
if(_index GREATER -1)
|
||||||
target_link_libraries(lammps PRIVATE ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
|
target_link_libraries(lammps PRIVATE ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
set(LAMMPS_CXX_HEADERS angle.h atom.h bond.h citeme.h comm.h compute.h dihedral.h domain.h error.h fix.h force.h group.h improper.h
|
set(LAMMPS_CXX_HEADERS angle.h atom.h bond.h citeme.h comm.h command.h compute.h dihedral.h domain.h
|
||||||
input.h info.h kspace.h lammps.h lattice.h library.h lmppython.h lmptype.h memory.h modify.h neighbor.h neigh_list.h output.h
|
error.h exceptions.h fix.h force.h group.h improper.h input.h info.h kspace.h lammps.h lattice.h
|
||||||
pair.h pointers.h region.h timer.h universe.h update.h utils.h variable.h)
|
library.h lmppython.h lmptype.h memory.h modify.h neighbor.h neigh_list.h output.h pair.h
|
||||||
if(LAMMPS_EXCEPTIONS)
|
platform.h pointers.h region.h timer.h universe.h update.h utils.h variable.h)
|
||||||
list(APPEND LAMMPS_CXX_HEADERS exceptions.h)
|
set(LAMMPS_FMT_HEADERS core.h format.h)
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(lammps PROPERTIES OUTPUT_NAME lammps${LAMMPS_MACHINE})
|
set_target_properties(lammps PROPERTIES OUTPUT_NAME lammps${LAMMPS_MACHINE})
|
||||||
set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION})
|
set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION})
|
||||||
set_target_properties(lammps PROPERTIES PREFIX "lib")
|
set_target_properties(lammps PROPERTIES PREFIX "lib")
|
||||||
target_include_directories(lammps PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/lammps>)
|
target_include_directories(lammps PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/lammps>)
|
||||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps)
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/fmt)
|
||||||
foreach(_HEADER ${LAMMPS_CXX_HEADERS})
|
foreach(_HEADER ${LAMMPS_CXX_HEADERS})
|
||||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${LAMMPS_SOURCE_DIR}/${_HEADER} ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER} DEPENDS ${LAMMPS_SOURCE_DIR}/${_HEADER})
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${LAMMPS_SOURCE_DIR}/${_HEADER} ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER} DEPENDS ${LAMMPS_SOURCE_DIR}/${_HEADER})
|
||||||
add_custom_target(${_HEADER} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER})
|
add_custom_target(${_HEADER} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER})
|
||||||
@ -690,6 +750,14 @@ foreach(_HEADER ${LAMMPS_CXX_HEADERS})
|
|||||||
install(FILES ${LAMMPS_SOURCE_DIR}/${_HEADER} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps)
|
install(FILES ${LAMMPS_SOURCE_DIR}/${_HEADER} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps)
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
foreach(_HEADER ${LAMMPS_FMT_HEADERS})
|
||||||
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/fmt/${_HEADER} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${LAMMPS_SOURCE_DIR}/fmt/${_HEADER} ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/fmt/${_HEADER} DEPENDS ${LAMMPS_SOURCE_DIR}/fmt/${_HEADER})
|
||||||
|
add_custom_target(fmt_${_HEADER} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/fmt/${_HEADER})
|
||||||
|
add_dependencies(lammps fmt_${_HEADER})
|
||||||
|
if(BUILD_SHARED_LIBS)
|
||||||
|
install(FILES ${LAMMPS_SOURCE_DIR}/fmt/${_HEADER} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps/fmt)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
target_include_directories(lammps INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/includes>)
|
target_include_directories(lammps INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/includes>)
|
||||||
add_library(LAMMPS::lammps ALIAS lammps)
|
add_library(LAMMPS::lammps ALIAS lammps)
|
||||||
get_target_property(LAMMPS_DEFINES lammps INTERFACE_COMPILE_DEFINITIONS)
|
get_target_property(LAMMPS_DEFINES lammps INTERFACE_COMPILE_DEFINITIONS)
|
||||||
@ -744,20 +812,26 @@ if(BUILD_SHARED_LIBS)
|
|||||||
set(Python_ADDITIONAL_VERSIONS 3.12 3.11 3.10 3.9 3.8 3.7 3.6)
|
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(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,16 +851,25 @@ 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)
|
||||||
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/python)
|
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/python/lib)
|
||||||
install(CODE "execute_process(COMMAND ${Python_EXECUTABLE} setup.py build -b ${CMAKE_BINARY_DIR}/python install --prefix=${CMAKE_INSTALL_PREFIX} --root=\$ENV{DESTDIR}/ WORKING_DIRECTORY ${LAMMPS_PYTHON_DIR})")
|
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/python/src)
|
||||||
|
file(COPY ${LAMMPS_SOURCE_DIR}/version.h DESTINATION ${CMAKE_BINARY_DIR}/python/src)
|
||||||
|
file(COPY ${LAMMPS_PYTHON_DIR}/README ${LAMMPS_PYTHON_DIR}/pyproject.toml ${LAMMPS_PYTHON_DIR}/setup.py ${LAMMPS_PYTHON_DIR}/lammps DESTINATION ${CMAKE_BINARY_DIR}/python/lib)
|
||||||
|
install(CODE "if(\"\$ENV{DESTDIR}\" STREQUAL \"\")\n execute_process(COMMAND ${Python_EXECUTABLE} -m pip install -v ${CMAKE_BINARY_DIR}/python/lib --prefix=${CMAKE_INSTALL_PREFIX})\n else()\n execute_process(COMMAND ${Python_EXECUTABLE} -m pip install -v ${CMAKE_BINARY_DIR}/python/lib --prefix=${CMAKE_INSTALL_PREFIX} --root=\$ENV{DESTDIR})\n endif()")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -897,9 +980,6 @@ if(PKG_GPU)
|
|||||||
endif()
|
endif()
|
||||||
message(STATUS "GPU precision: ${GPU_PREC}")
|
message(STATUS "GPU precision: ${GPU_PREC}")
|
||||||
endif()
|
endif()
|
||||||
if(PKG_KOKKOS)
|
|
||||||
message(STATUS "Kokkos Arch: ${KOKKOS_ARCH}")
|
|
||||||
endif()
|
|
||||||
if(PKG_KSPACE)
|
if(PKG_KSPACE)
|
||||||
message(STATUS "<<< FFT settings >>>
|
message(STATUS "<<< FFT settings >>>
|
||||||
-- Primary FFT lib: ${FFT}")
|
-- Primary FFT lib: ${FFT}")
|
||||||
@ -920,6 +1000,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,8 +167,142 @@
|
|||||||
"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)
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,10 @@
|
|||||||
# Find clang-format
|
# Find clang-format
|
||||||
find_program(ClangFormat_EXECUTABLE NAMES clang-format
|
find_program(ClangFormat_EXECUTABLE NAMES clang-format
|
||||||
|
clang-format-15.0
|
||||||
|
clang-format-14.0
|
||||||
|
clang-format-13.0
|
||||||
|
clang-format-12.0
|
||||||
|
clang-format-11.0
|
||||||
clang-format-10.0
|
clang-format-10.0
|
||||||
clang-format-9.0
|
clang-format-9.0
|
||||||
clang-format-8.0
|
clang-format-8.0
|
||||||
@ -14,19 +19,27 @@ if(ClangFormat_EXECUTABLE)
|
|||||||
OUTPUT_VARIABLE clang_format_version
|
OUTPUT_VARIABLE clang_format_version
|
||||||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
|
if(clang_format_version MATCHES "^(Ubuntu |)clang-format version .*")
|
||||||
if(clang_format_version MATCHES "^clang-format version .*")
|
# Arch Linux output:
|
||||||
# Arch Linux
|
|
||||||
# clang-format version 10.0.0
|
# clang-format version 10.0.0
|
||||||
|
#
|
||||||
# Ubuntu 18.04 LTS Output
|
# Ubuntu 18.04 LTS output:
|
||||||
# clang-format version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
|
# clang-format version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
|
||||||
string(REGEX REPLACE "clang-format version ([0-9.]+).*"
|
#
|
||||||
"\\1"
|
# Ubuntu 20.04 LTS output:
|
||||||
|
# clang-format version 10.0.0-4ubuntu1
|
||||||
|
#
|
||||||
|
# Ubuntu 22.04 LTS output:
|
||||||
|
# Ubuntu clang-format version 14.0.0-1ubuntu1
|
||||||
|
#
|
||||||
|
# Fedora 36 output:
|
||||||
|
# clang-format version 14.0.5 (Fedora 14.0.5-1.fc36)
|
||||||
|
string(REGEX REPLACE "^(Ubuntu |)clang-format version ([0-9.]+).*"
|
||||||
|
"\\2"
|
||||||
ClangFormat_VERSION
|
ClangFormat_VERSION
|
||||||
"${clang_format_version}")
|
"${clang_format_version}")
|
||||||
elseif(clang_format_version MATCHES ".*LLVM version .*")
|
elseif(clang_format_version MATCHES ".*LLVM version .*")
|
||||||
# CentOS 7 Output
|
# CentOS 7 output:
|
||||||
# LLVM (http://llvm.org/):
|
# LLVM (http://llvm.org/):
|
||||||
# LLVM version 3.4.2
|
# LLVM version 3.4.2
|
||||||
# Optimized build.
|
# Optimized build.
|
||||||
|
|||||||
@ -22,7 +22,7 @@ endif()
|
|||||||
if(Python_EXECUTABLE)
|
if(Python_EXECUTABLE)
|
||||||
get_filename_component(_python_path ${Python_EXECUTABLE} PATH)
|
get_filename_component(_python_path ${Python_EXECUTABLE} PATH)
|
||||||
find_program(Cythonize_EXECUTABLE
|
find_program(Cythonize_EXECUTABLE
|
||||||
NAMES cythonize3 cythonize cythonize.bat
|
NAMES cythonize-${Python_VERSION_MAJOR}.${Python_VERSION_MINOR} cythonize3 cythonize cythonize.bat
|
||||||
HINTS ${_python_path})
|
HINTS ${_python_path})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
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,39 @@ function(validate_option name values)
|
|||||||
endif()
|
endif()
|
||||||
endfunction(validate_option)
|
endfunction(validate_option)
|
||||||
|
|
||||||
|
# helper function to check for usable omp.h header
|
||||||
|
function(check_omp_h_include)
|
||||||
|
find_package(OpenMP COMPONENTS CXX QUIET)
|
||||||
|
if(OpenMP_CXX_FOUND)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS ${OpenMP_CXX_FLAGS})
|
||||||
|
set(CMAKE_REQUIRED_INCLUDES ${OpenMP_CXX_INCLUDE_DIRS})
|
||||||
|
set(CMAKE_REQUIRED_LINK_OPTIONS ${OpenMP_CXX_FLAGS})
|
||||||
|
set(CMAKE_REQUIRED_LIBRARIES ${OpenMP_CXX_LIBRARIES})
|
||||||
|
check_include_file_cxx(omp.h _have_omp_h)
|
||||||
|
else()
|
||||||
|
set(_have_omp_h FALSE)
|
||||||
|
endif()
|
||||||
|
set(HAVE_OMP_H_INCLUDE ${_have_omp_h} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# 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)
|
||||||
@ -92,14 +125,16 @@ function(FetchPotentials pkgfolder potfolder)
|
|||||||
math(EXPR plusone "${blank}+1")
|
math(EXPR plusone "${blank}+1")
|
||||||
string(SUBSTRING ${line} 0 ${blank} pot)
|
string(SUBSTRING ${line} 0 ${blank} pot)
|
||||||
string(SUBSTRING ${line} ${plusone} -1 sum)
|
string(SUBSTRING ${line} ${plusone} -1 sum)
|
||||||
if(EXISTS ${LAMMPS_POTENTIALS_DIR}/${pot})
|
if(EXISTS "${LAMMPS_POTENTIALS_DIR}/${pot}")
|
||||||
file(MD5 "${LAMMPS_POTENTIALS_DIR}/${pot}" oldsum)
|
file(MD5 "${LAMMPS_POTENTIALS_DIR}/${pot}" oldsum)
|
||||||
endif()
|
endif()
|
||||||
if(NOT sum STREQUAL oldsum)
|
if(NOT sum STREQUAL oldsum)
|
||||||
message(STATUS "Checking external potential ${pot} from ${LAMMPS_POTENTIALS_URL}")
|
message(STATUS "Downloading external potential ${pot} from ${LAMMPS_POTENTIALS_URL}")
|
||||||
file(DOWNLOAD "${LAMMPS_POTENTIALS_URL}/${pot}.${sum}" "${CMAKE_BINARY_DIR}/${pot}"
|
string(MD5 TMP_EXT "${CMAKE_BINARY_DIR}")
|
||||||
|
file(DOWNLOAD "${LAMMPS_POTENTIALS_URL}/${pot}.${sum}" "${CMAKE_BINARY_DIR}/${pot}.${TMP_EXT}"
|
||||||
EXPECTED_HASH MD5=${sum} SHOW_PROGRESS)
|
EXPECTED_HASH MD5=${sum} SHOW_PROGRESS)
|
||||||
file(COPY "${CMAKE_BINARY_DIR}/${pot}" DESTINATION ${LAMMPS_POTENTIALS_DIR})
|
file(COPY "${CMAKE_BINARY_DIR}/${pot}.${TMP_EXT}" DESTINATION "${LAMMPS_POTENTIALS_DIR}")
|
||||||
|
file(RENAME "${LAMMPS_POTENTIALS_DIR}/${pot}.${TMP_EXT}" "${LAMMPS_POTENTIALS_DIR}/${pot}")
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -233,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()
|
||||||
@ -261,6 +262,8 @@ 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)")
|
||||||
@ -340,7 +343,14 @@ 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")
|
||||||
endif()
|
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()
|
||||||
|
|
||||||
add_custom_command(OUTPUT ${CUBIN_H_FILE}
|
add_custom_command(OUTPUT ${CUBIN_H_FILE}
|
||||||
COMMAND ${CMAKE_COMMAND} -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -D VARNAME=${CU_NAME} -D HEADER_FILE=${CUBIN_H_FILE} -D SOURCE_FILE=${CUBIN_FILE} -P ${CMAKE_CURRENT_SOURCE_DIR}/Modules/GenerateBinaryHeader.cmake
|
COMMAND ${CMAKE_COMMAND} -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -D VARNAME=${CU_NAME} -D HEADER_FILE=${CUBIN_H_FILE} -D SOURCE_FILE=${CUBIN_FILE} -P ${CMAKE_CURRENT_SOURCE_DIR}/Modules/GenerateBinaryHeader.cmake
|
||||||
|
|||||||
@ -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})
|
||||||
|
|||||||
@ -15,8 +15,9 @@ if(Kokkos_ENABLE_OPENMP)
|
|||||||
if(NOT BUILD_OMP)
|
if(NOT BUILD_OMP)
|
||||||
message(FATAL_ERROR "Must enable BUILD_OMP with Kokkos_ENABLE_OPENMP")
|
message(FATAL_ERROR "Must enable BUILD_OMP with Kokkos_ENABLE_OPENMP")
|
||||||
else()
|
else()
|
||||||
if(LAMMPS_OMP_COMPAT_LEVEL LESS 4)
|
# NVHPC does not seem to provide a detectable OpenMP version, but is far beyond version 3.1
|
||||||
message(FATAL_ERROR "Compiler must support OpenMP 4.0 or later with Kokkos_ENABLE_OPENMP")
|
if((OpenMP_CXX_VERSION VERSION_LESS 3.1) AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC"))
|
||||||
|
message(FATAL_ERROR "Compiler must support OpenMP 3.1 or later with Kokkos_ENABLE_OPENMP")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@ -47,8 +48,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.7.00.tar.gz" CACHE STRING "URL for KOKKOS tarball")
|
||||||
set(KOKKOS_MD5 "079323d973ae0e1c38c0a54a150c674e" CACHE STRING "MD5 checksum of KOKKOS tarball")
|
set(KOKKOS_MD5 "84991eca9f066383abe119a5bc7a11c4" 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 +73,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.7.00 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 +131,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.3.0.tar.gz" CACHE STRING "URL for MDI tarball")
|
set(MDI_URL "https://github.com/MolSSI-MDI/MDI_Library/archive/v1.4.12.tar.gz" CACHE STRING "URL for MDI tarball")
|
||||||
set(MDI_MD5 "8a8da217148bd9b700083b67d795af5e" CACHE STRING "MD5 checksum for MDI tarball")
|
set(MDI_MD5 "7a222353ae8e03961d5365e6cd48baee" 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()
|
||||||
@ -36,6 +49,14 @@ if(DOWNLOAD_MDI)
|
|||||||
set(MDI_USE_PYTHON_PLUGINS ON)
|
set(MDI_USE_PYTHON_PLUGINS ON)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
# python plugins are not supported and thus must be always off on Windows
|
||||||
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||||
|
unset(Python_Development_FOUND)
|
||||||
|
set(MDI_USE_PYTHON_PLUGINS OFF)
|
||||||
|
if(CMAKE_CROSSCOMPILING)
|
||||||
|
set(CMAKE_INSTALL_LIBDIR lib)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# download/ build MDI library
|
# download/ build MDI library
|
||||||
# always build static library with -fpic
|
# always build static library with -fpic
|
||||||
@ -44,34 +65,37 @@ 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}
|
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/mdi_build_ext
|
||||||
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
|
CMAKE_ARGS
|
||||||
|
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/mdi_build_ext
|
||||||
-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 ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/mdi_build_ext/src/mdi_build-build --target install
|
||||||
BUILD_BYPRODUCTS "<BINARY_DIR>/MDI_Library/libmdi.a"
|
BUILD_BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/mdi_build_ext/${CMAKE_INSTALL_LIBDIR}/mdi/${CMAKE_STATIC_LIBRARY_PREFIX}mdi${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# where is the compiled library?
|
# where is the compiled library?
|
||||||
ExternalProject_get_property(mdi_build BINARY_DIR)
|
ExternalProject_get_property(mdi_build PREFIX)
|
||||||
set(MDI_BINARY_DIR "${BINARY_DIR}/MDI_Library")
|
|
||||||
# workaround for older CMake versions
|
# workaround for older CMake versions
|
||||||
file(MAKE_DIRECTORY ${MDI_BINARY_DIR})
|
file(MAKE_DIRECTORY ${PREFIX}/${CMAKE_INSTALL_LIBDIR}/mdi)
|
||||||
|
file(MAKE_DIRECTORY ${PREFIX}/include/mdi)
|
||||||
|
|
||||||
# create imported target for the MDI library
|
# create imported target for the MDI library
|
||||||
add_library(LAMMPS::MDI UNKNOWN IMPORTED)
|
add_library(LAMMPS::MDI UNKNOWN IMPORTED)
|
||||||
add_dependencies(LAMMPS::MDI mdi_build)
|
add_dependencies(LAMMPS::MDI mdi_build)
|
||||||
set_target_properties(LAMMPS::MDI PROPERTIES
|
set_target_properties(LAMMPS::MDI PROPERTIES
|
||||||
IMPORTED_LOCATION "${MDI_BINARY_DIR}/libmdi.a"
|
IMPORTED_LOCATION "${PREFIX}/${CMAKE_INSTALL_LIBDIR}/mdi/${CMAKE_STATIC_LIBRARY_PREFIX}mdi${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||||
INTERFACE_INCLUDE_DIRECTORIES ${MDI_BINARY_DIR}
|
INTERFACE_INCLUDE_DIRECTORIES ${PREFIX}/include/mdi
|
||||||
)
|
)
|
||||||
|
|
||||||
set(MDI_DEP_LIBS "")
|
set(MDI_DEP_LIBS "")
|
||||||
# if compiling with python plugins we need
|
# if compiling with python plugins we need
|
||||||
|
|||||||
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()
|
||||||
@ -44,7 +44,9 @@ if(DOWNLOAD_N2P2)
|
|||||||
else()
|
else()
|
||||||
# get path to MPI include directory
|
# get path to MPI include directory
|
||||||
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})
|
||||||
|
set(N2P2_PROJECT_OPTIONS "${N2P2_PROJECT_OPTIONS} -I${_INCL}")
|
||||||
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# prefer GNU make, if available. N2P2 lib seems to need it.
|
# prefer GNU make, if available. N2P2 lib seems to need it.
|
||||||
@ -75,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
|
||||||
|
|||||||
@ -2,7 +2,13 @@
|
|||||||
set(MLIAP_ENABLE_PYTHON_DEFAULT OFF)
|
set(MLIAP_ENABLE_PYTHON_DEFAULT OFF)
|
||||||
if(PKG_PYTHON)
|
if(PKG_PYTHON)
|
||||||
find_package(Cythonize QUIET)
|
find_package(Cythonize QUIET)
|
||||||
if(Cythonize_FOUND)
|
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.14)
|
||||||
|
find_package(Python COMPONENTS NumPy QUIET)
|
||||||
|
else()
|
||||||
|
# assume we have NumPy
|
||||||
|
set(Python_NumPy_FOUND ON)
|
||||||
|
endif()
|
||||||
|
if(Cythonize_FOUND AND Python_NumPy_FOUND)
|
||||||
set(MLIAP_ENABLE_PYTHON_DEFAULT ON)
|
set(MLIAP_ENABLE_PYTHON_DEFAULT ON)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@ -11,6 +17,9 @@ option(MLIAP_ENABLE_PYTHON "Build ML-IAP package with Python support" ${MLIAP_EN
|
|||||||
|
|
||||||
if(MLIAP_ENABLE_PYTHON)
|
if(MLIAP_ENABLE_PYTHON)
|
||||||
find_package(Cythonize REQUIRED)
|
find_package(Cythonize REQUIRED)
|
||||||
|
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.14)
|
||||||
|
find_package(Python COMPONENTS NumPy REQUIRED)
|
||||||
|
endif()
|
||||||
if(NOT PKG_PYTHON)
|
if(NOT PKG_PYTHON)
|
||||||
message(FATAL_ERROR "Must enable PYTHON package for including Python support in ML-IAP")
|
message(FATAL_ERROR "Must enable PYTHON package for including Python support in ML-IAP")
|
||||||
endif()
|
endif()
|
||||||
@ -25,16 +34,18 @@ if(MLIAP_ENABLE_PYTHON)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(MLIAP_BINARY_DIR ${CMAKE_BINARY_DIR}/cython)
|
set(MLIAP_BINARY_DIR ${CMAKE_BINARY_DIR}/cython)
|
||||||
set(MLIAP_CYTHON_SRC ${LAMMPS_SOURCE_DIR}/ML-IAP/mliap_model_python_couple.pyx)
|
file(GLOB MLIAP_CYTHON_SRC ${LAMMPS_SOURCE_DIR}/ML-IAP/*.pyx)
|
||||||
get_filename_component(MLIAP_CYTHON_BASE ${MLIAP_CYTHON_SRC} NAME_WE)
|
|
||||||
file(MAKE_DIRECTORY ${MLIAP_BINARY_DIR})
|
file(MAKE_DIRECTORY ${MLIAP_BINARY_DIR})
|
||||||
add_custom_command(OUTPUT ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.cpp ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.h
|
foreach(MLIAP_CYTHON_FILE ${MLIAP_CYTHON_SRC})
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${MLIAP_CYTHON_SRC} ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.pyx
|
get_filename_component(MLIAP_CYTHON_BASE ${MLIAP_CYTHON_FILE} NAME_WE)
|
||||||
COMMAND ${Cythonize_EXECUTABLE} -3 ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.pyx
|
add_custom_command(OUTPUT ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.cpp ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.h
|
||||||
WORKING_DIRECTORY ${MLIAP_BINARY_DIR}
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${MLIAP_CYTHON_FILE} ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.pyx
|
||||||
MAIN_DEPENDENCY ${MLIAP_CYTHON_SRC}
|
COMMAND ${Cythonize_EXECUTABLE} -3 ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.pyx
|
||||||
COMMENT "Generating C++ sources with cythonize...")
|
WORKING_DIRECTORY ${MLIAP_BINARY_DIR}
|
||||||
|
MAIN_DEPENDENCY ${MLIAP_CYTHON_FILE}
|
||||||
|
COMMENT "Generating C++ sources with cythonize...")
|
||||||
|
target_sources(lammps PRIVATE ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.cpp)
|
||||||
|
endforeach()
|
||||||
target_compile_definitions(lammps PRIVATE -DMLIAP_PYTHON)
|
target_compile_definitions(lammps PRIVATE -DMLIAP_PYTHON)
|
||||||
target_sources(lammps PRIVATE ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.cpp)
|
|
||||||
target_include_directories(lammps PRIVATE ${MLIAP_BINARY_DIR})
|
target_include_directories(lammps PRIVATE ${MLIAP_BINARY_DIR})
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@ -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.2022.10.15.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 "848ad6a6cc79fa82745927001fb1c9b5" 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,20 +13,11 @@ 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-*)
|
add_subdirectory(${lib-pace} build-pace)
|
||||||
add_subdirectory(${lib-pace}/yaml-cpp build-yaml-cpp)
|
|
||||||
set(YAML_CPP_INCLUDE_DIR ${lib-pace}/yaml-cpp/include)
|
|
||||||
|
|
||||||
file(GLOB PACE_EVALUATOR_INCLUDE_DIR ${lib-pace}/ML-PACE)
|
|
||||||
file(GLOB PACE_EVALUATOR_SOURCES ${lib-pace}/ML-PACE/*.cpp)
|
|
||||||
list(FILTER PACE_EVALUATOR_SOURCES EXCLUDE REGEX pair_pace.cpp)
|
|
||||||
|
|
||||||
add_library(pace STATIC ${PACE_EVALUATOR_SOURCES})
|
|
||||||
set_target_properties(pace PROPERTIES CXX_EXTENSIONS ON OUTPUT_NAME lammps_pace${LAMMPS_MACHINE})
|
set_target_properties(pace PROPERTIES CXX_EXTENSIONS ON OUTPUT_NAME lammps_pace${LAMMPS_MACHINE})
|
||||||
target_include_directories(pace PUBLIC ${PACE_EVALUATOR_INCLUDE_DIR} ${YAML_CPP_INCLUDE_DIR})
|
|
||||||
|
|
||||||
|
if(CMAKE_PROJECT_NAME STREQUAL "lammps")
|
||||||
target_link_libraries(pace PRIVATE yaml-cpp-pace)
|
target_link_libraries(lammps PRIVATE pace)
|
||||||
|
endif()
|
||||||
target_link_libraries(lammps PRIVATE pace)
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -47,15 +47,15 @@ if(DOWNLOAD_PLUMED)
|
|||||||
endif()
|
endif()
|
||||||
message(STATUS "PLUMED download requested - we will build our own")
|
message(STATUS "PLUMED download requested - we will build our own")
|
||||||
if(PLUMED_MODE STREQUAL "STATIC")
|
if(PLUMED_MODE STREQUAL "STATIC")
|
||||||
set(PLUMED_BUILD_BYPRODUCTS "<INSTALL_DIR>/lib/libplumed.a")
|
set(PLUMED_BUILD_BYPRODUCTS "<INSTALL_DIR>/lib/${CMAKE_STATIC_LIBRARY_PREFIX}plumed${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||||
elseif(PLUMED_MODE STREQUAL "SHARED")
|
elseif(PLUMED_MODE STREQUAL "SHARED")
|
||||||
set(PLUMED_BUILD_BYPRODUCTS "<INSTALL_DIR>/lib/libplumed${CMAKE_SHARED_LIBRARY_SUFFIX};<INSTALL_DIR>/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
set(PLUMED_BUILD_BYPRODUCTS "<INSTALL_DIR>/lib/${CMAKE_SHARED_LIBRARY_PREFIX}plumed${CMAKE_SHARED_LIBRARY_SUFFIX};<INSTALL_DIR>/lib/${CMAKE_SHARED_LIBRARY_PREFIX}plumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||||
elseif(PLUMED_MODE STREQUAL "RUNTIME")
|
elseif(PLUMED_MODE STREQUAL "RUNTIME")
|
||||||
set(PLUMED_BUILD_BYPRODUCTS "<INSTALL_DIR>/lib/libplumedWrapper.a")
|
set(PLUMED_BUILD_BYPRODUCTS "<INSTALL_DIR>/lib/${CMAKE_STATIC_LIBRARY_PREFIX}plumedWrapper${CMAKE_STATIC_LIBRARY_PREFIX}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(PLUMED_URL "https://github.com/plumed/plumed2/releases/download/v2.7.4/plumed-src-2.7.4.tgz" CACHE STRING "URL for PLUMED tarball")
|
set(PLUMED_URL "https://github.com/plumed/plumed2/releases/download/v2.8.1/plumed-src-2.8.1.tgz" CACHE STRING "URL for PLUMED tarball")
|
||||||
set(PLUMED_MD5 "858e0b6aed173748fc85b6bc8a9dcb3e" CACHE STRING "MD5 checksum of PLUMED tarball")
|
set(PLUMED_MD5 "6bfe72ebdae63dc38a9ca27d9b0e08f8" CACHE STRING "MD5 checksum of PLUMED tarball")
|
||||||
|
|
||||||
mark_as_advanced(PLUMED_URL)
|
mark_as_advanced(PLUMED_URL)
|
||||||
mark_as_advanced(PLUMED_MD5)
|
mark_as_advanced(PLUMED_MD5)
|
||||||
@ -78,12 +78,12 @@ if(DOWNLOAD_PLUMED)
|
|||||||
add_library(LAMMPS::PLUMED UNKNOWN IMPORTED)
|
add_library(LAMMPS::PLUMED UNKNOWN IMPORTED)
|
||||||
add_dependencies(LAMMPS::PLUMED plumed_build)
|
add_dependencies(LAMMPS::PLUMED plumed_build)
|
||||||
if(PLUMED_MODE STREQUAL "STATIC")
|
if(PLUMED_MODE STREQUAL "STATIC")
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libplumed.a INTERFACE_LINK_LIBRARIES "${PLUMED_LINK_LIBS};${CMAKE_DL_LIBS}")
|
set_target_properties(LAMMPS::PLUMED PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}plumed${CMAKE_STATIC_LIBRARY_SUFFIX} INTERFACE_LINK_LIBRARIES "${PLUMED_LINK_LIBS};${CMAKE_DL_LIBS}")
|
||||||
elseif(PLUMED_MODE STREQUAL "SHARED")
|
elseif(PLUMED_MODE STREQUAL "SHARED")
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libplumed${CMAKE_SHARED_LIBRARY_SUFFIX} INTERFACE_LINK_LIBRARIES "${INSTALL_DIR}/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX};${CMAKE_DL_LIBS}")
|
set_target_properties(LAMMPS::PLUMED PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}plumed${CMAKE_SHARED_LIBRARY_SUFFIX} INTERFACE_LINK_LIBRARIES "${INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}plumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX};${CMAKE_DL_LIBS}")
|
||||||
elseif(PLUMED_MODE STREQUAL "RUNTIME")
|
elseif(PLUMED_MODE STREQUAL "RUNTIME")
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_COMPILE_DEFINITIONS "__PLUMED_DEFAULT_KERNEL=${INSTALL_DIR}/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_COMPILE_DEFINITIONS "__PLUMED_DEFAULT_KERNEL=${INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}plumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libplumedWrapper.a INTERFACE_LINK_LIBRARIES "${CMAKE_DL_LIBS}")
|
set_target_properties(LAMMPS::PLUMED PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}plumedWrapper${CMAKE_STATIC_LIBRARY_SUFFIX} INTERFACE_LINK_LIBRARIES "${CMAKE_DL_LIBS}")
|
||||||
endif()
|
endif()
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include)
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include)
|
||||||
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
|
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
|
||||||
@ -96,7 +96,7 @@ else()
|
|||||||
elseif(PLUMED_MODE STREQUAL "SHARED")
|
elseif(PLUMED_MODE STREQUAL "SHARED")
|
||||||
include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.shared)
|
include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.shared)
|
||||||
elseif(PLUMED_MODE STREQUAL "RUNTIME")
|
elseif(PLUMED_MODE STREQUAL "RUNTIME")
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_COMPILE_DEFINITIONS "__PLUMED_DEFAULT_KERNEL=${PLUMED_LIBDIR}/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_COMPILE_DEFINITIONS "__PLUMED_DEFAULT_KERNEL=${PLUMED_LIBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}plumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||||
include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.runtime)
|
include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.runtime)
|
||||||
endif()
|
endif()
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_LINK_LIBRARIES "${PLUMED_LOAD}")
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_LINK_LIBRARIES "${PLUMED_LOAD}")
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
@ -1,4 +1,9 @@
|
|||||||
find_package(VTK REQUIRED NO_MODULE)
|
find_package(VTK REQUIRED NO_MODULE)
|
||||||
include(${VTK_USE_FILE})
|
|
||||||
target_compile_definitions(lammps PRIVATE -DLAMMPS_VTK)
|
target_compile_definitions(lammps PRIVATE -DLAMMPS_VTK)
|
||||||
target_link_libraries(lammps PRIVATE ${VTK_LIBRARIES})
|
if (VTK_MAJOR_VERSION VERSION_LESS 9.0)
|
||||||
|
include(${VTK_USE_FILE})
|
||||||
|
target_link_libraries(lammps PRIVATE ${VTK_LIBRARIES})
|
||||||
|
else()
|
||||||
|
target_link_libraries(lammps PRIVATE VTK::CommonCore VTK::IOCore VTK::CommonDataModel VTK::IOXML VTK::IOLegacy VTK::IOParallelXML)
|
||||||
|
vtk_module_autoinit(TARGETS lammps MODULES VTK::CommonCore VTK::IOCore VTK::CommonDataModel VTK::IOXML VTK::IOLegacy VTK::IOParallelXML)
|
||||||
|
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,6 +3,7 @@
|
|||||||
|
|
||||||
set(ALL_PACKAGES
|
set(ALL_PACKAGES
|
||||||
ADIOS
|
ADIOS
|
||||||
|
AMOEBA
|
||||||
ASPHERE
|
ASPHERE
|
||||||
ATC
|
ATC
|
||||||
AWPMD
|
AWPMD
|
||||||
@ -11,7 +12,7 @@ set(ALL_PACKAGES
|
|||||||
BPM
|
BPM
|
||||||
BROWNIAN
|
BROWNIAN
|
||||||
CG-DNA
|
CG-DNA
|
||||||
CG-SDK
|
CG-SPICA
|
||||||
CLASS2
|
CLASS2
|
||||||
COLLOID
|
COLLOID
|
||||||
COLVARS
|
COLVARS
|
||||||
@ -25,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
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
set(ALL_PACKAGES
|
set(ALL_PACKAGES
|
||||||
ADIOS
|
ADIOS
|
||||||
|
AMOEBA
|
||||||
ASPHERE
|
ASPHERE
|
||||||
ATC
|
ATC
|
||||||
AWPMD
|
AWPMD
|
||||||
@ -13,7 +14,7 @@ set(ALL_PACKAGES
|
|||||||
BPM
|
BPM
|
||||||
BROWNIAN
|
BROWNIAN
|
||||||
CG-DNA
|
CG-DNA
|
||||||
CG-SDK
|
CG-SPICA
|
||||||
CLASS2
|
CLASS2
|
||||||
COLLOID
|
COLLOID
|
||||||
COLVARS
|
COLVARS
|
||||||
@ -27,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
|
||||||
|
|||||||
@ -3,6 +3,13 @@
|
|||||||
# prefer flang over gfortran, if available
|
# prefer flang over gfortran, if available
|
||||||
find_program(CLANG_FORTRAN NAMES flang gfortran f95)
|
find_program(CLANG_FORTRAN NAMES flang gfortran f95)
|
||||||
set(ENV{OMPI_FC} ${CLANG_FORTRAN})
|
set(ENV{OMPI_FC} ${CLANG_FORTRAN})
|
||||||
|
get_filename_component(_tmp_fc ${CLANG_FORTRAN} NAME)
|
||||||
|
if (_tmp_fc STREQUAL "flang")
|
||||||
|
set(FC_STD_VERSION "-std=f2018")
|
||||||
|
set(BUILD_MPI OFF)
|
||||||
|
else()
|
||||||
|
set(FC_STD_VERSION "-std=f2003")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_CXX_COMPILER "clang++" CACHE STRING "" FORCE)
|
set(CMAKE_CXX_COMPILER "clang++" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_C_COMPILER "clang" CACHE STRING "" FORCE)
|
set(CMAKE_C_COMPILER "clang" CACHE STRING "" FORCE)
|
||||||
@ -10,9 +17,9 @@ set(CMAKE_Fortran_COMPILER ${CLANG_FORTRAN} CACHE STRING "" FORCE)
|
|||||||
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -Wextra -g" CACHE STRING "" FORCE)
|
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -Wextra -g" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Wall -Wextra -g -O2 -DNDEBUG" CACHE STRING "" FORCE)
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Wall -Wextra -g -O2 -DNDEBUG" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "" FORCE)
|
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_Fortran_FLAGS_DEBUG "-Wall -Wextra -g -std=f2003" CACHE STRING "" FORCE)
|
set(CMAKE_Fortran_FLAGS_DEBUG "-Wall -Wextra -g ${FC_STD_VERSION}" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-Wall -Wextra -g -O2 -DNDEBUG -std=f2003" CACHE STRING "" FORCE)
|
set(CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-Wall -Wextra -g -O2 -DNDEBUG ${FC_STD_VERSION}" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -DNDEBUG -std=f2003" CACHE STRING "" FORCE)
|
set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -DNDEBUG ${FC_STD_VERSION}" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_C_FLAGS_DEBUG "-Wall -Wextra -g" CACHE STRING "" FORCE)
|
set(CMAKE_C_FLAGS_DEBUG "-Wall -Wextra -g" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Wall -Wextra -g -O2 -DNDEBUG" CACHE STRING "" FORCE)
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Wall -Wextra -g -O2 -DNDEBUG" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "" FORCE)
|
set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "" FORCE)
|
||||||
@ -21,10 +28,3 @@ set(MPI_CXX "clang++" CACHE STRING "" FORCE)
|
|||||||
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
||||||
|
|
||||||
unset(HAVE_OMP_H_INCLUDE CACHE)
|
unset(HAVE_OMP_H_INCLUDE CACHE)
|
||||||
set(OpenMP_C "clang" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_C_FLAGS "-fopenmp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_CXX "clang++" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_omp_LIBRARY "libomp.so" CACHE PATH "" FORCE)
|
|
||||||
|
|||||||
@ -19,11 +19,3 @@ set(CMAKE_Fortran_FLAGS_DEBUG "-Wall -Og -g -std=f2003" CACHE STRING "" FORCE)
|
|||||||
set(CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-g -O2 -DNDEBUG -std=f2003" CACHE STRING "" FORCE)
|
set(CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-g -O2 -DNDEBUG -std=f2003" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -DNDEBUG -std=f2003" CACHE STRING "" FORCE)
|
set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -DNDEBUG -std=f2003" CACHE STRING "" FORCE)
|
||||||
unset(HAVE_OMP_H_INCLUDE CACHE)
|
unset(HAVE_OMP_H_INCLUDE CACHE)
|
||||||
|
|
||||||
set(OpenMP_C "gcc" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_C_FLAGS "-fopenmp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_C_LIB_NAMES "gomp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_CXX "g++" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_CXX_LIB_NAMES "gomp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_omp_LIBRARY "libgomp.so" CACHE PATH "" FORCE)
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# preset that will enable Intel compilers with support for MPI and OpenMP (on Linux boxes)
|
# preset that will enable the classic Intel compilers with support for MPI and OpenMP (on Linux boxes)
|
||||||
|
|
||||||
set(CMAKE_CXX_COMPILER "icpc" CACHE STRING "" FORCE)
|
set(CMAKE_CXX_COMPILER "icpc" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_C_COMPILER "icc" CACHE STRING "" FORCE)
|
set(CMAKE_C_COMPILER "icc" CACHE STRING "" FORCE)
|
||||||
@ -18,11 +18,11 @@ set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
|||||||
|
|
||||||
unset(HAVE_OMP_H_INCLUDE CACHE)
|
unset(HAVE_OMP_H_INCLUDE CACHE)
|
||||||
set(OpenMP_C "icc" CACHE STRING "" FORCE)
|
set(OpenMP_C "icc" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_C_FLAGS "-qopenmp" CACHE STRING "" FORCE)
|
set(OpenMP_C_FLAGS "-qopenmp -qopenmp-simd" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_CXX "icpc" CACHE STRING "" FORCE)
|
set(OpenMP_CXX "icpc" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_CXX_FLAGS "-qopenmp" CACHE STRING "" FORCE)
|
set(OpenMP_CXX_FLAGS "-qopenmp -qopenmp-simd" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_Fortran_FLAGS "-qopenmp" CACHE STRING "" FORCE)
|
set(OpenMP_Fortran_FLAGS "-qopenmp -qopenmp-simd" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_omp_LIBRARY "libiomp5.so" CACHE PATH "" FORCE)
|
set(OpenMP_omp_LIBRARY "libiomp5.so" CACHE PATH "" FORCE)
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -8,6 +8,9 @@ set(Kokkos_ENABLE_SYCL ON CACHE BOOL "" FORCE)
|
|||||||
set(Kokkos_ARCH_MAXWELL50 on CACHE BOOL "" FORCE)
|
set(Kokkos_ARCH_MAXWELL50 on 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)
|
||||||
|
|
||||||
set(CMAKE_CXX_COMPILER clang++ CACHE STRING "" FORCE)
|
set(CMAKE_CXX_COMPILER clang++ CACHE STRING "" FORCE)
|
||||||
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE)
|
set(CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE)
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
set(WIN_PACKAGES
|
set(WIN_PACKAGES
|
||||||
|
AMOEBA
|
||||||
ASPHERE
|
ASPHERE
|
||||||
ATC
|
ATC
|
||||||
AWPMD
|
AWPMD
|
||||||
@ -7,7 +8,7 @@ set(WIN_PACKAGES
|
|||||||
BPM
|
BPM
|
||||||
BROWNIAN
|
BROWNIAN
|
||||||
CG-DNA
|
CG-DNA
|
||||||
CG-SDK
|
CG-SPICA
|
||||||
CLASS2
|
CLASS2
|
||||||
COLLOID
|
COLLOID
|
||||||
COLVARS
|
COLVARS
|
||||||
@ -21,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
|
||||||
@ -45,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
|
||||||
@ -55,6 +57,7 @@ set(WIN_PACKAGES
|
|||||||
ORIENT
|
ORIENT
|
||||||
PERI
|
PERI
|
||||||
PHONON
|
PHONON
|
||||||
|
PLUGIN
|
||||||
POEMS
|
POEMS
|
||||||
PTM
|
PTM
|
||||||
QEQ
|
QEQ
|
||||||
|
|||||||
@ -3,13 +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
|
BPM
|
||||||
BROWNIAN
|
BROWNIAN
|
||||||
CG-DNA
|
CG-DNA
|
||||||
CG-SDK
|
CG-SPICA
|
||||||
CLASS2
|
CLASS2
|
||||||
COLLOID
|
COLLOID
|
||||||
COLVARS
|
COLVARS
|
||||||
@ -23,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
|
||||||
|
|||||||
9
cmake/presets/nvhpc.cmake
Normal file
9
cmake/presets/nvhpc.cmake
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# preset that will enable Nvidia HPC SDK compilers with support for MPI and OpenMP (on Linux boxes)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_COMPILER "nvc++" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_COMPILER "nvc" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_Fortran_COMPILER "nvfortran" CACHE STRING "" FORCE)
|
||||||
|
set(MPI_CXX "nvc++" CACHE STRING "" FORCE)
|
||||||
|
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
||||||
|
unset(HAVE_OMP_H_INCLUDE CACHE)
|
||||||
|
|
||||||
@ -18,11 +18,11 @@ set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
|||||||
|
|
||||||
unset(HAVE_OMP_H_INCLUDE CACHE)
|
unset(HAVE_OMP_H_INCLUDE CACHE)
|
||||||
set(OpenMP_C "icx" CACHE STRING "" FORCE)
|
set(OpenMP_C "icx" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_C_FLAGS "-qopenmp" CACHE STRING "" FORCE)
|
set(OpenMP_C_FLAGS "-qopenmp -qopenmp-simd" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_CXX "icpx" CACHE STRING "" FORCE)
|
set(OpenMP_CXX "icpx" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_CXX_FLAGS "-qopenmp" CACHE STRING "" FORCE)
|
set(OpenMP_CXX_FLAGS "-qopenmp -qopenmp-simd" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_Fortran_FLAGS "-qopenmp" CACHE STRING "" FORCE)
|
set(OpenMP_Fortran_FLAGS "-qopenmp -qopenmp-simd" CACHE STRING "" FORCE)
|
||||||
set(OpenMP_omp_LIBRARY "libiomp5.so" CACHE PATH "" FORCE)
|
set(OpenMP_omp_LIBRARY "libiomp5.so" CACHE PATH "" FORCE)
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# preset that will restore gcc/g++ with support for MPI and OpenMP (on Linux boxes)
|
# preset that will set gcc/g++ with extra warnings enabled and support for MPI and OpenMP (on Linux boxes)
|
||||||
|
|
||||||
set(CMAKE_CXX_COMPILER "g++" CACHE STRING "" FORCE)
|
set(CMAKE_CXX_COMPILER "g++" CACHE STRING "" FORCE)
|
||||||
set(CMAKE_C_COMPILER "gcc" CACHE STRING "" FORCE)
|
set(CMAKE_C_COMPILER "gcc" CACHE STRING "" FORCE)
|
||||||
@ -17,10 +17,3 @@ set(MPI_Fortran "gfortran" CACHE STRING "" FORCE)
|
|||||||
set(MPI_Fortran_COMPILER "mpifort" CACHE STRING "" FORCE)
|
set(MPI_Fortran_COMPILER "mpifort" CACHE STRING "" FORCE)
|
||||||
unset(HAVE_OMP_H_INCLUDE CACHE)
|
unset(HAVE_OMP_H_INCLUDE CACHE)
|
||||||
|
|
||||||
set(OpenMP_C "gcc" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_C_FLAGS "-fopenmp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_C_LIB_NAMES "gomp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_CXX "g++" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_CXX_LIB_NAMES "gomp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_omp_LIBRARY "libgomp.so" CACHE PATH "" FORCE)
|
|
||||||
|
|||||||
@ -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)
|
||||||
@ -7,10 +7,3 @@ set(MPI_CXX "pgc++" CACHE STRING "" FORCE)
|
|||||||
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
|
||||||
unset(HAVE_OMP_H_INCLUDE CACHE)
|
unset(HAVE_OMP_H_INCLUDE CACHE)
|
||||||
|
|
||||||
set(OpenMP_C "pgcc" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_C_FLAGS "-mp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_CXX "pgc++" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_CXX_FLAGS "-mp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE)
|
|
||||||
set(OpenMP_omp_LIBRARY "libomp.so" CACHE PATH "" 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,11 +1,12 @@
|
|||||||
set(WIN_PACKAGES
|
set(WIN_PACKAGES
|
||||||
|
AMOEBA
|
||||||
ASPHERE
|
ASPHERE
|
||||||
BOCS
|
BOCS
|
||||||
BODY
|
BODY
|
||||||
BPM
|
BPM
|
||||||
BROWNIAN
|
BROWNIAN
|
||||||
CG-DNA
|
CG-DNA
|
||||||
CG-SDK
|
CG-SPICA
|
||||||
CLASS2
|
CLASS2
|
||||||
COLLOID
|
COLLOID
|
||||||
COLVARS
|
COLVARS
|
||||||
@ -43,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
|
||||||
|
|||||||
72
doc/Makefile
72
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
|
||||||
@ -49,16 +38,14 @@ endif
|
|||||||
# override settings for PIP commands
|
# override settings for PIP commands
|
||||||
# PIP_OPTIONS = --cert /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt --proxy http://proxy.mydomain.org
|
# PIP_OPTIONS = --cert /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt --proxy http://proxy.mydomain.org
|
||||||
|
|
||||||
#SPHINXEXTRA = -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiprocessing.cpu_count())') $(shell test -f $(BUILDDIR)/doxygen/xml/run.stamp && printf -- "-E")
|
|
||||||
|
|
||||||
# temporarily disable caching so that the hack for the sphinx-tabs extensions to get proper non-html output works
|
# temporarily disable caching so that the hack for the sphinx-tabs extensions to get proper non-html output works
|
||||||
SPHINXEXTRA = -E -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiprocessing.cpu_count())')
|
SPHINXEXTRA = -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiprocessing.cpu_count())')
|
||||||
|
|
||||||
# grab list of sources from doxygen config file.
|
# grab list of sources from doxygen config file.
|
||||||
# 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 html pdf spelling anchor_check style_check char_check xmlgen fasthtml
|
||||||
|
|
||||||
# ------------------------------------------
|
# ------------------------------------------
|
||||||
|
|
||||||
@ -70,7 +57,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 +71,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
|
||||||
@ -99,6 +87,8 @@ html: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJAX)
|
|||||||
@$(MAKE) $(MFLAGS) -C graphviz all
|
@$(MAKE) $(MFLAGS) -C graphviz all
|
||||||
@(\
|
@(\
|
||||||
. $(VENV)/bin/activate ; env PYTHONWARNINGS= \
|
. $(VENV)/bin/activate ; env PYTHONWARNINGS= \
|
||||||
|
sphinx-build -E $(SPHINXEXTRA) -b html -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) html ;\
|
||||||
|
touch $(RSTDIR)/Fortran.rst ;\
|
||||||
sphinx-build $(SPHINXEXTRA) -b html -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) html ;\
|
sphinx-build $(SPHINXEXTRA) -b html -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) html ;\
|
||||||
ln -sf Manual.html html/index.html;\
|
ln -sf Manual.html html/index.html;\
|
||||||
rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\
|
rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\
|
||||||
@ -118,6 +108,25 @@ 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 $(SPHINXEXTRA) -b html -c $(SPHINXCONFIG) -d $(BUILDDIR)/fasthtml/doctrees $(RSTDIR) fasthtml ;\
|
||||||
|
touch $(RSTDIR)/Fortran.rst ;\
|
||||||
|
sphinx-build $(SPHINXEXTRA) -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
|
||||||
@(\
|
@(\
|
||||||
@ -137,6 +146,8 @@ epub: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK)
|
|||||||
@cp src/JPG/*.* epub/JPG
|
@cp src/JPG/*.* epub/JPG
|
||||||
@(\
|
@(\
|
||||||
. $(VENV)/bin/activate ;\
|
. $(VENV)/bin/activate ;\
|
||||||
|
sphinx-build -E $(SPHINXEXTRA) -b epub -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) epub ;\
|
||||||
|
touch $(RSTDIR)/Fortran.rst ;\
|
||||||
sphinx-build $(SPHINXEXTRA) -b epub -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) epub ;\
|
sphinx-build $(SPHINXEXTRA) -b epub -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) epub ;\
|
||||||
rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\
|
rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\
|
||||||
deactivate ;\
|
deactivate ;\
|
||||||
@ -156,7 +167,9 @@ pdf: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK)
|
|||||||
@if [ "$(HAS_PDFLATEX)" == "NO" ] ; then echo "PDFLaTeX or latexmk were not found! Please check README for further instructions" 1>&2; exit 1; fi
|
@if [ "$(HAS_PDFLATEX)" == "NO" ] ; then echo "PDFLaTeX or latexmk were not found! Please check README for further instructions" 1>&2; exit 1; fi
|
||||||
@(\
|
@(\
|
||||||
. $(VENV)/bin/activate ; env PYTHONWARNINGS= \
|
. $(VENV)/bin/activate ; env PYTHONWARNINGS= \
|
||||||
sphinx-build $(SPHINXEXTRA) -b latex -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) latex ;\
|
sphinx-build -E $(SPHINXEXTRA) -b latex -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) latex ;\
|
||||||
|
touch $(RSTDIR)/Fortran.rst ;\
|
||||||
|
sphinx-build $(SPHINXEXTRA) -b latex -c $(SPHINXCONFIG) -d $(BUILDDIR)/doctrees $(RSTDIR) latex ;\
|
||||||
rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\
|
rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\
|
||||||
echo "############################################" ;\
|
echo "############################################" ;\
|
||||||
rst_anchor_check src/*.rst ;\
|
rst_anchor_check src/*.rst ;\
|
||||||
@ -220,22 +233,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" "24 March 2022" "2022-3-24"
|
.TH LAMMPS "1" "15 September 2022" "2022-9-15"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
.B LAMMPS
|
.B LAMMPS
|
||||||
\- Molecular Dynamics Simulator. Version 24 March 2022
|
\- Molecular Dynamics Simulator. Version 15 September 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
|
||||||
|
|||||||
@ -314,7 +314,7 @@ Bibliography
|
|||||||
Espanol, Revenga, Physical Review E, 67, 026705 (2003).
|
Espanol, Revenga, Physical Review E, 67, 026705 (2003).
|
||||||
|
|
||||||
**(Espanol1997)**
|
**(Espanol1997)**
|
||||||
Espanol, Europhys Lett, 40(6): 631-636 (1997). DOI: 10.1209/epl/i1997-00515-8
|
Espanol, Europhys Lett, 40(6): 631-636 (1997). DOI:10.1209/epl/i1997-00515-8
|
||||||
|
|
||||||
**(Evans and Morriss)**
|
**(Evans and Morriss)**
|
||||||
Evans and Morriss, Phys Rev A, 30, 1528 (1984).
|
Evans and Morriss, Phys Rev A, 30, 1528 (1984).
|
||||||
@ -368,7 +368,7 @@ Bibliography
|
|||||||
Frenkel and Smit, Understanding Molecular Simulation, Academic Press, London, 2002.
|
Frenkel and Smit, Understanding Molecular Simulation, Academic Press, London, 2002.
|
||||||
|
|
||||||
**(GLE4MD)**
|
**(GLE4MD)**
|
||||||
`http://gle4md.org/ <http://gle4md.org/>`_
|
`https://gle4md.org/ <https://gle4md.org/>`_
|
||||||
|
|
||||||
**(Gao)**
|
**(Gao)**
|
||||||
Gao and Weber, Nuclear Instruments and Methods in Physics Research B 191 (2012) 504.
|
Gao and Weber, Nuclear Instruments and Methods in Physics Research B 191 (2012) 504.
|
||||||
@ -401,13 +401,13 @@ Bibliography
|
|||||||
Hayre, and Farago, Comp Phys Comm, 185, 524 (2014)
|
Hayre, and Farago, Comp Phys Comm, 185, 524 (2014)
|
||||||
|
|
||||||
**(Groot)**
|
**(Groot)**
|
||||||
Groot and Warren, J Chem Phys, 107: 4423-4435 (1997). DOI: 10.1063/1.474784
|
Groot and Warren, J Chem Phys, 107: 4423-4435 (1997). DOI:10.1063/1.474784
|
||||||
|
|
||||||
**(Guenole)**
|
**(Guenole)**
|
||||||
Guenole, Noehring, Vaid, Houlle, Xie, Prakash, Bitzek, Comput Mater Sci, 175, 109584 (2020).
|
Guenole, Noehring, Vaid, Houlle, Xie, Prakash, Bitzek, Comput Mater Sci, 175, 109584 (2020).
|
||||||
|
|
||||||
**(Gullet)**
|
**(Gullet)**
|
||||||
Gullet, Wagner, Slepoy, SANDIA Report 2003-8782 (2003).
|
Gullet, Wagner, Slepoy, SANDIA Report 2003-8782 (2003). DOI:10.2172/918395
|
||||||
|
|
||||||
**(Guo)**
|
**(Guo)**
|
||||||
Guo and Thirumalai, Journal of Molecular Biology, 263, 323-43 (1996).
|
Guo and Thirumalai, Journal of Molecular Biology, 263, 323-43 (1996).
|
||||||
@ -461,7 +461,7 @@ Bibliography
|
|||||||
Hunt, Mol Simul, 42, 347 (2016).
|
Hunt, Mol Simul, 42, 347 (2016).
|
||||||
|
|
||||||
**(IPI)**
|
**(IPI)**
|
||||||
`http://epfl-cosmo.github.io/gle4md/index.html?page=ipi <http://epfl-cosmo.github.io/gle4md/index.html?page=ipi>`_
|
`https://ipi-code.org/ <https://ipi-code.org/>`
|
||||||
|
|
||||||
**(IPI-CPC)**
|
**(IPI-CPC)**
|
||||||
Ceriotti, More and Manolopoulos, Comp Phys Comm, 185, 1019-1026 (2014).
|
Ceriotti, More and Manolopoulos, Comp Phys Comm, 185, 1019-1026 (2014).
|
||||||
@ -605,16 +605,16 @@ Bibliography
|
|||||||
I.\ Leven et al, J. Chem.Theory Comput. 12, 2896-905 (2016).
|
I.\ Leven et al, J. Chem.Theory Comput. 12, 2896-905 (2016).
|
||||||
|
|
||||||
**(Li2013_POF)**
|
**(Li2013_POF)**
|
||||||
Li, Hu, Wang, Ma, Zhou, Phys Fluids, 25: 072103 (2013). DOI: 10.1063/1.4812366.
|
Li, Hu, Wang, Ma, Zhou, Phys Fluids, 25: 072103 (2013). DOI:10.1063/1.4812366.
|
||||||
|
|
||||||
**(Li2014_JCP)**
|
**(Li2014_JCP)**
|
||||||
Li, Tang, Lei, Caswell, Karniadakis, J Comput Phys, 265: 113-127 (2014). DOI: 10.1016/j.jcp.2014.02.003.
|
Li, Tang, Lei, Caswell, Karniadakis, J Comput Phys, 265: 113-127 (2014). DOI:10.1016/j.jcp.2014.02.003.
|
||||||
|
|
||||||
**(Li2015_CC)**
|
**(Li2015_CC)**
|
||||||
Li, Tang, Li, Karniadakis, Chem Commun, 51: 11038-11040 (2015). DOI: 10.1039/C5CC01684C.
|
Li, Tang, Li, Karniadakis, Chem Commun, 51: 11038-11040 (2015). DOI:10.1039/C5CC01684C.
|
||||||
|
|
||||||
**(Li2015_JCP)**
|
**(Li2015_JCP)**
|
||||||
Li, Yazdani, Tartakovsky, Karniadakis, J Chem Phys, 143: 014101 (2015). DOI: 10.1063/1.4923254.
|
Li, Yazdani, Tartakovsky, Karniadakis, J Chem Phys, 143: 014101 (2015). DOI:10.1063/1.4923254.
|
||||||
|
|
||||||
**(Lisal)**
|
**(Lisal)**
|
||||||
M.\ Lisal, J.K. Brennan, J. Bonet Avalos, "Dissipative particle dynamics at isothermal, isobaric, isoenergetic, and isoenthalpic conditions using Shardlow-like splitting algorithms.",
|
M.\ Lisal, J.K. Brennan, J. Bonet Avalos, "Dissipative particle dynamics at isothermal, isobaric, isoenergetic, and isoenthalpic conditions using Shardlow-like splitting algorithms.",
|
||||||
@ -733,8 +733,8 @@ Bibliography
|
|||||||
**(Mishin)**
|
**(Mishin)**
|
||||||
Mishin, Mehl, and Papaconstantopoulos, Acta Mater, 53, 4029 (2005).
|
Mishin, Mehl, and Papaconstantopoulos, Acta Mater, 53, 4029 (2005).
|
||||||
|
|
||||||
**(Mitchell and Finchham)**
|
**(Mitchell and Fincham)**
|
||||||
Mitchell, Finchham, J Phys Condensed Matter, 5, 1031-1038 (1993).
|
Mitchell, Fincham, J Phys Condensed Matter, 5, 1031-1038 (1993).
|
||||||
|
|
||||||
**(Mitchell2011)**
|
**(Mitchell2011)**
|
||||||
Mitchell. A non-local, ordinary-state-based viscoelasticity model for peridynamics. Sandia National Lab Report, 8064:1-28 (2011).
|
Mitchell. A non-local, ordinary-state-based viscoelasticity model for peridynamics. Sandia National Lab Report, 8064:1-28 (2011).
|
||||||
@ -875,7 +875,7 @@ Bibliography
|
|||||||
G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014)
|
G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014)
|
||||||
|
|
||||||
**(Paquay)**
|
**(Paquay)**
|
||||||
Paquay and Kusters, Biophys. J., 110, 6, (2016). preprint available at `arXiv:1411.3019 <http://arxiv.org/abs/1411.3019/>`_.
|
Paquay and Kusters, Biophys. J., 110, 6, (2016). preprint available at `arXiv:1411.3019 <https://arxiv.org/abs/1411.3019/>`_.
|
||||||
|
|
||||||
**(Park)**
|
**(Park)**
|
||||||
Park, Schulten, J. Chem. Phys. 120 (13), 5946 (2004)
|
Park, Schulten, J. Chem. Phys. 120 (13), 5946 (2004)
|
||||||
@ -1373,7 +1373,7 @@ Bibliography
|
|||||||
Zhu, Tajkhorshid, and Schulten, Biophys. J. 83, 154 (2002).
|
Zhu, Tajkhorshid, and Schulten, Biophys. J. 83, 154 (2002).
|
||||||
|
|
||||||
**(Ziegler)**
|
**(Ziegler)**
|
||||||
J.F. Ziegler, J. P. Biersack and U. Littmark, "The Stopping and Range of Ions in Matter," Volume 1, Pergamon, 1985.
|
J.F. Ziegler, J. P. Biersack and U. Littmark, "The Stopping and Range of Ions in Matter", Volume 1, Pergamon, 1985.
|
||||||
|
|
||||||
**(Zimmerman2004)**
|
**(Zimmerman2004)**
|
||||||
Zimmerman, JA; Webb, EB; Hoyt, JJ;. Jones, RE; Klein, PA; Bammann, DJ, "Calculation of stress in atomistic simulation." Special Issue of Modelling and Simulation in Materials Science and Engineering (2004),12:S319.
|
Zimmerman, JA; Webb, EB; Hoyt, JJ;. Jones, RE; Klein, PA; Bammann, DJ, "Calculation of stress in atomistic simulation." Special Issue of Modelling and Simulation in Materials Science and Engineering (2004),12:S319.
|
||||||
|
|||||||
@ -140,13 +140,23 @@ of the LAMMPS project on GitHub.
|
|||||||
The unit testing facility is integrated into the CMake build process
|
The unit testing facility is integrated into the CMake build process
|
||||||
of the LAMMPS source code distribution itself. It can be enabled by
|
of the LAMMPS source code distribution itself. It can be enabled by
|
||||||
setting ``-D ENABLE_TESTING=on`` during the CMake configuration step.
|
setting ``-D ENABLE_TESTING=on`` during the CMake configuration step.
|
||||||
It requires the `YAML <http://pyyaml.org/>`_ library and development
|
It requires the `YAML <https://pyyaml.org/>`_ library and development
|
||||||
headers (if those are not found locally a recent version will be
|
headers (if those are not found locally a recent version will be
|
||||||
downloaded and compiled along with LAMMPS and the test program) to
|
downloaded and compiled along with LAMMPS and the test program) to
|
||||||
compile and will download and compile a specific recent version of the
|
compile and will download and compile a specific recent version of the
|
||||||
`Googletest <https://github.com/google/googletest/>`_ C++ test framework
|
`Googletest <https://github.com/google/googletest/>`_ C++ test framework
|
||||||
for implementing the tests.
|
for implementing the tests.
|
||||||
|
|
||||||
|
.. admonition:: Software version requirements for testing
|
||||||
|
:class: note
|
||||||
|
|
||||||
|
The compiler and library version requirements for the testing
|
||||||
|
framework are more strict than for the main part of LAMMPS. For
|
||||||
|
example the default GNU C++ and Fortran compilers of RHEL/CentOS 7.x
|
||||||
|
(version 4.8.x) are not sufficient. The CMake configuration will try
|
||||||
|
to detect compatible versions and either skip incompatible tests or
|
||||||
|
stop with an error.
|
||||||
|
|
||||||
After compilation is complete, the unit testing is started in the build
|
After compilation is complete, the unit testing is started in the build
|
||||||
folder using the ``ctest`` command, which is part of the CMake software.
|
folder using the ``ctest`` command, which is part of the CMake software.
|
||||||
The output of this command will be looking something like this::
|
The output of this command will be looking something like this::
|
||||||
@ -486,14 +496,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
|
||||||
--------------------
|
--------------------
|
||||||
|
|||||||
@ -123,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
|
||||||
@ -179,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
|
||||||
@ -191,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
|
||||||
|
|
||||||
@ -199,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
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@ -215,7 +234,7 @@ LAMMPS code. This also applies to the ``-DLAMMPS_BIGBIG``\ ,
|
|||||||
Makefile you use.
|
Makefile you use.
|
||||||
|
|
||||||
You can also build the library in one step from the ``lammps/src`` dir,
|
You can also build the library in one step from the ``lammps/src`` dir,
|
||||||
using a command like these, which simply invoke the ``lib/gpu/Install.py``
|
using a command like these, which simply invokes the ``lib/gpu/Install.py``
|
||||||
script with the specified args:
|
script with the specified args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -295,7 +314,7 @@ detailed information is available at:
|
|||||||
|
|
||||||
In addition to installing the KIM API, it is also necessary to install the
|
In addition to installing the KIM API, it is also necessary to install the
|
||||||
library of KIM models (interatomic potentials).
|
library of KIM models (interatomic potentials).
|
||||||
See `Obtaining KIM Models <http://openkim.org/doc/usage/obtaining-models>`_ to
|
See `Obtaining KIM Models <https://openkim.org/doc/usage/obtaining-models>`_ to
|
||||||
learn how to install a pre-build binary of the OpenKIM Repository of Models.
|
learn how to install a pre-build binary of the OpenKIM Repository of Models.
|
||||||
See the list of all KIM models here: https://openkim.org/browse/models
|
See the list of all KIM models here: https://openkim.org/browse/models
|
||||||
|
|
||||||
@ -331,7 +350,7 @@ minutes to hours) to build. Of course you only need to do that once.)
|
|||||||
You can download and build the KIM library manually if you prefer;
|
You can download and build the KIM library manually if you prefer;
|
||||||
follow the instructions in ``lib/kim/README``. You can also do
|
follow the instructions in ``lib/kim/README``. You can also do
|
||||||
this in one step from the lammps/src directory, using a command like
|
this in one step from the lammps/src directory, using a command like
|
||||||
these, which simply invoke the ``lib/kim/Install.py`` script with
|
these, which simply invokes the ``lib/kim/Install.py`` script with
|
||||||
the specified args.
|
the specified args.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -413,7 +432,7 @@ Enabling the extra unit tests have some requirements,
|
|||||||
``EAM_Dynamo_MendelevAckland_2007v3_Zr__MO_004835508849_000``,
|
``EAM_Dynamo_MendelevAckland_2007v3_Zr__MO_004835508849_000``,
|
||||||
``EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005``, and
|
``EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005``, and
|
||||||
``LennardJones612_UniversalShifted__MO_959249795837_003`` KIM models.
|
``LennardJones612_UniversalShifted__MO_959249795837_003`` KIM models.
|
||||||
See `Obtaining KIM Models <http://openkim.org/doc/usage/obtaining-models>`_
|
See `Obtaining KIM Models <https://openkim.org/doc/usage/obtaining-models>`_
|
||||||
to learn how to install a pre-built binary of the OpenKIM Repository of
|
to learn how to install a pre-built binary of the OpenKIM Repository of
|
||||||
Models or see
|
Models or see
|
||||||
`Installing KIM Models <https://openkim.org/doc/usage/obtaining-models/#installing_models>`_
|
`Installing KIM Models <https://openkim.org/doc/usage/obtaining-models/#installing_models>`_
|
||||||
@ -464,6 +483,9 @@ They must be specified in uppercase.
|
|||||||
* - **Arch-ID**
|
* - **Arch-ID**
|
||||||
- **HOST or GPU**
|
- **HOST or GPU**
|
||||||
- **Description**
|
- **Description**
|
||||||
|
* - NATIVE
|
||||||
|
- HOST
|
||||||
|
- Local machine
|
||||||
* - AMDAVX
|
* - AMDAVX
|
||||||
- HOST
|
- HOST
|
||||||
- AMD 64-bit x86 CPU (AVX 1)
|
- AMD 64-bit x86 CPU (AVX 1)
|
||||||
@ -503,9 +525,21 @@ They must be specified in uppercase.
|
|||||||
* - BDW
|
* - BDW
|
||||||
- HOST
|
- HOST
|
||||||
- Intel Broadwell Xeon E-class CPU (AVX 2 + transactional mem)
|
- Intel Broadwell Xeon E-class CPU (AVX 2 + transactional mem)
|
||||||
|
* - SKL
|
||||||
|
- HOST
|
||||||
|
- Intel Skylake Client CPU
|
||||||
* - SKX
|
* - SKX
|
||||||
- HOST
|
- HOST
|
||||||
- Intel Sky Lake Xeon E-class HPC CPU (AVX512 + transactional mem)
|
- Intel Skylake Xeon Server CPU (AVX512)
|
||||||
|
* - ICL
|
||||||
|
- HOST
|
||||||
|
- Intel Ice Lake Client CPU (AVX512)
|
||||||
|
* - ICX
|
||||||
|
- HOST
|
||||||
|
- Intel Ice Lake Xeon Server CPU (AVX512)
|
||||||
|
* - SPR
|
||||||
|
- HOST
|
||||||
|
- Intel Sapphire Rapids Xeon Server CPU (AVX512)
|
||||||
* - KNC
|
* - KNC
|
||||||
- HOST
|
- HOST
|
||||||
- Intel Knights Corner Xeon Phi
|
- Intel Knights Corner Xeon Phi
|
||||||
@ -577,7 +611,10 @@ They must be specified in uppercase.
|
|||||||
- AMD GPU MI100 GFX908
|
- AMD GPU MI100 GFX908
|
||||||
* - VEGA90A
|
* - VEGA90A
|
||||||
- GPU
|
- GPU
|
||||||
- AMD GPU
|
- AMD GPU MI200 GFX90A
|
||||||
|
* - INTEL_GEN
|
||||||
|
- GPU
|
||||||
|
- SPIR64-based devices, e.g. Intel GPUs, using JIT
|
||||||
* - INTEL_DG1
|
* - INTEL_DG1
|
||||||
- GPU
|
- GPU
|
||||||
- Intel Iris XeMAX GPU
|
- Intel Iris XeMAX GPU
|
||||||
@ -592,9 +629,12 @@ They must be specified in uppercase.
|
|||||||
- Intel GPU Gen12LP
|
- Intel GPU Gen12LP
|
||||||
* - INTEL_XEHP
|
* - INTEL_XEHP
|
||||||
- GPU
|
- GPU
|
||||||
- Intel GPUs Xe-HP
|
- Intel GPU Xe-HP
|
||||||
|
* - INTEL_PVC
|
||||||
|
- GPU
|
||||||
|
- Intel GPU Ponte Vecchio
|
||||||
|
|
||||||
This list was last updated for version 3.5.0 of the Kokkos library.
|
This list was last updated for version 3.7.0 of the Kokkos library.
|
||||||
|
|
||||||
.. tabs::
|
.. tabs::
|
||||||
|
|
||||||
@ -641,14 +681,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, four 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``, ``kokkos-cuda.cmake``, and
|
``kokkos-openmp.cmake``, ``kokkos-cuda.cmake``,
|
||||||
``kokkos-sycl.cmake``. They will enable the KOKKOS package and
|
``kokkos-hip.cmake``, and ``kokkos-sycl.cmake``. They will enable
|
||||||
enable some hardware choice. So to compile with OpenMP host
|
the KOKKOS package and enable some hardware choice. So to compile
|
||||||
parallelization, CUDA device parallelization (for GPUs with CC 5.0
|
with CUDA device parallelization (for GPUs with CC 5.0 and up)
|
||||||
and up) with some common packages enabled, you can do the
|
with some common packages enabled, you can do the following:
|
||||||
following:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
@ -707,6 +760,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
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
@ -766,8 +828,10 @@ library.
|
|||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
-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
|
||||||
@ -775,6 +839,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
|
||||||
@ -883,7 +954,7 @@ more details.
|
|||||||
You can download and build the MS-CG library manually if you
|
You can download and build the MS-CG library manually if you
|
||||||
prefer; follow the instructions in ``lib/mscg/README``\ . You can
|
prefer; follow the instructions in ``lib/mscg/README``\ . You can
|
||||||
also do it in one step from the ``lammps/src`` dir, using a
|
also do it in one step from the ``lammps/src`` dir, using a
|
||||||
command like these, which simply invoke the
|
command like these, which simply invokes the
|
||||||
``lib/mscg/Install.py`` script with the specified args:
|
``lib/mscg/Install.py`` script with the specified args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -940,7 +1011,7 @@ POEMS package
|
|||||||
``lib/poems``\ . You can do this manually if you prefer; follow
|
``lib/poems``\ . You can do this manually if you prefer; follow
|
||||||
the instructions in ``lib/poems/README``\ . You can also do it in
|
the instructions in ``lib/poems/README``\ . You can also do it in
|
||||||
one step from the ``lammps/src`` dir, using a command like these,
|
one step from the ``lammps/src`` dir, using a command like these,
|
||||||
which simply invoke the ``lib/poems/Install.py`` script with the
|
which simply invokes the ``lib/poems/Install.py`` script with the
|
||||||
specified args:
|
specified args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -1003,7 +1074,7 @@ VORONOI package
|
|||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
To build with this package, you must download and build the
|
To build with this package, you must download and build the
|
||||||
`Voro++ library <http://math.lbl.gov/voro++>`_ or install a
|
`Voro++ library <https://math.lbl.gov/voro++>`_ or install a
|
||||||
binary package provided by your operating system.
|
binary package provided by your operating system.
|
||||||
|
|
||||||
.. tabs::
|
.. tabs::
|
||||||
@ -1029,7 +1100,7 @@ binary package provided by your operating system.
|
|||||||
You can download and build the Voro++ library manually if you
|
You can download and build the Voro++ library manually if you
|
||||||
prefer; follow the instructions in ``lib/voronoi/README``. You
|
prefer; follow the instructions in ``lib/voronoi/README``. You
|
||||||
can also do it in one step from the ``lammps/src`` dir, using a
|
can also do it in one step from the ``lammps/src`` dir, using a
|
||||||
command like these, which simply invoke the
|
command like these, which simply invokes the
|
||||||
``lib/voronoi/Install.py`` script with the specified args:
|
``lib/voronoi/Install.py`` script with the specified args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -1108,7 +1179,7 @@ The ATC package requires the MANYBODY package also be installed.
|
|||||||
``lib/atc``. You can do this manually if you prefer; follow the
|
``lib/atc``. You can do this manually if you prefer; follow the
|
||||||
instructions in ``lib/atc/README``. You can also do it in one
|
instructions in ``lib/atc/README``. You can also do it in one
|
||||||
step from the ``lammps/src`` dir, using a command like these,
|
step from the ``lammps/src`` dir, using a command like these,
|
||||||
which simply invoke the ``lib/atc/Install.py`` script with the
|
which simply invokes the ``lib/atc/Install.py`` script with the
|
||||||
specified args:
|
specified args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -1159,7 +1230,7 @@ AWPMD package
|
|||||||
``lib/awpmd``. You can do this manually if you prefer; follow the
|
``lib/awpmd``. You can do this manually if you prefer; follow the
|
||||||
instructions in ``lib/awpmd/README``. You can also do it in one
|
instructions in ``lib/awpmd/README``. You can also do it in one
|
||||||
step from the ``lammps/src`` dir, using a command like these,
|
step from the ``lammps/src`` dir, using a command like these,
|
||||||
which simply invoke the ``lib/awpmd/Install.py`` script with the
|
which simply invokes the ``lib/awpmd/Install.py`` script with the
|
||||||
specified args:
|
specified args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -1222,7 +1293,7 @@ be built for the most part with all major versions of the C++ language.
|
|||||||
|
|
||||||
In general, it is safer to use build setting consistent with the
|
In general, it is safer to use build setting consistent with the
|
||||||
rest of LAMMPS. This is best carried out from the LAMMPS src
|
rest of LAMMPS. This is best carried out from the LAMMPS src
|
||||||
directory using a command like these, which simply invoke the
|
directory using a command like these, which simply invokes the
|
||||||
``lib/colvars/Install.py`` script with the specified args:
|
``lib/colvars/Install.py`` script with the specified args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -1252,6 +1323,54 @@ 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
|
||||||
|
|
||||||
|
Before building LAMMPS, you must configure the ELECTRODE support
|
||||||
|
libraries and settings in ``lib/electrode``. You can do this
|
||||||
|
manually, if you prefer, or do it in one step from the
|
||||||
|
``lammps/src`` dir, using a command like these, which simply
|
||||||
|
invokes the ``lib/electrode/Install.py`` script with the specified
|
||||||
|
args:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ make lib-electrode # print help message
|
||||||
|
$ make lib-electrode args="-m serial" # build with GNU g++ compiler and MPI STUBS (settings as with "make serial")
|
||||||
|
$ make lib-electrode args="-m mpi" # build with default MPI compiler (settings as with "make mpi")
|
||||||
|
|
||||||
|
|
||||||
|
Note that the ``Makefile.lammps`` file has settings for the BLAS
|
||||||
|
and LAPACK linear algebra libraries. 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
|
||||||
|
|
||||||
|
The package itself is activated with ``make yes-KSPACE`` and
|
||||||
|
``make yes-ELECTRODE``
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
.. _ml-pace:
|
.. _ml-pace:
|
||||||
|
|
||||||
ML-PACE package
|
ML-PACE package
|
||||||
@ -1449,7 +1568,7 @@ the HDF5 library.
|
|||||||
``lib/h5md``. You can do this manually if you prefer; follow the
|
``lib/h5md``. You can do this manually if you prefer; follow the
|
||||||
instructions in ``lib/h5md/README``. You can also do it in one
|
instructions in ``lib/h5md/README``. You can also do it in one
|
||||||
step from the ``lammps/src`` dir, using a command like these,
|
step from the ``lammps/src`` dir, using a command like these,
|
||||||
which simply invoke the ``lib/h5md/Install.py`` script with the
|
which simply invokes the ``lib/h5md/Install.py`` script with the
|
||||||
specified args:
|
specified args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -1505,7 +1624,7 @@ details please see ``lib/hdnnp/README`` and the `n2p2 build documentation
|
|||||||
You can download and build the *n2p2* library manually if you prefer;
|
You can download and build the *n2p2* library manually if you prefer;
|
||||||
follow the instructions in ``lib/hdnnp/README``\ . You can also do it in
|
follow the instructions in ``lib/hdnnp/README``\ . You can also do it in
|
||||||
one step from the ``lammps/src`` dir, using a command like these, which
|
one step from the ``lammps/src`` dir, using a command like these, which
|
||||||
simply invoke the ``lib/hdnnp/Install.py`` script with the specified args:
|
simply invokes the ``lib/hdnnp/Install.py`` script with the specified args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
@ -1642,7 +1761,7 @@ they will be downloaded the first time this package is installed.
|
|||||||
Before building LAMMPS, you must build the *mesont* library in
|
Before building LAMMPS, you must build the *mesont* library in
|
||||||
``lib/mesont``\ . You can also do it in one step from the
|
``lib/mesont``\ . You can also do it in one step from the
|
||||||
``lammps/src`` dir, using a command like these, which simply
|
``lammps/src`` dir, using a command like these, which simply
|
||||||
invoke the ``lib/mesont/Install.py`` script with the specified
|
invokes the ``lib/mesont/Install.py`` script with the specified
|
||||||
args:
|
args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -1811,7 +1930,7 @@ verified to work in February 2020 with Quantum Espresso versions 6.3 to
|
|||||||
``lib/qmmm``. You can do this manually if you prefer; follow the
|
``lib/qmmm``. You can do this manually if you prefer; follow the
|
||||||
first two steps explained in ``lib/qmmm/README``. You can also do
|
first two steps explained in ``lib/qmmm/README``. You can also do
|
||||||
it in one step from the ``lammps/src`` dir, using a command like
|
it in one step from the ``lammps/src`` dir, using a command like
|
||||||
these, which simply invoke the ``lib/qmmm/Install.py`` script with
|
these, which simply invokes the ``lib/qmmm/Install.py`` script with
|
||||||
the specified args:
|
the specified args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -1856,14 +1975,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
|
||||||
|
|
||||||
@ -1908,7 +2038,7 @@ To build with this package, you must download and build the
|
|||||||
You can download and build the ScaFaCoS library manually if you
|
You can download and build the ScaFaCoS library manually if you
|
||||||
prefer; follow the instructions in ``lib/scafacos/README``. You
|
prefer; follow the instructions in ``lib/scafacos/README``. You
|
||||||
can also do it in one step from the ``lammps/src`` dir, using a
|
can also do it in one step from the ``lammps/src`` dir, using a
|
||||||
command like these, which simply invoke the
|
command like these, which simply invokes the
|
||||||
``lib/scafacos/Install.py`` script with the specified args:
|
``lib/scafacos/Install.py`` script with the specified args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -1952,7 +2082,7 @@ Eigen3 is a template library, so you do not need to build it.
|
|||||||
You can download the Eigen3 library manually if you prefer; follow
|
You can download the Eigen3 library manually if you prefer; follow
|
||||||
the instructions in ``lib/smd/README``. You can also do it in one
|
the instructions in ``lib/smd/README``. You can also do it in one
|
||||||
step from the ``lammps/src`` dir, using a command like these,
|
step from the ``lammps/src`` dir, using a command like these,
|
||||||
which simply invoke the ``lib/smd/Install.py`` script with the
|
which simply invokes the ``lib/smd/Install.py`` script with the
|
||||||
specified args:
|
specified args:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
@ -178,7 +176,7 @@ math expressions transparently into embedded images.
|
|||||||
For converting the generated ePUB file to a MOBI format file (for e-book
|
For converting the generated ePUB file to a MOBI format file (for e-book
|
||||||
readers, like Kindle, that cannot read ePUB), you also need to have the
|
readers, like Kindle, that cannot read ePUB), you also need to have the
|
||||||
``ebook-convert`` tool from the "calibre" software
|
``ebook-convert`` tool from the "calibre" software
|
||||||
installed. `http://calibre-ebook.com/ <http://calibre-ebook.com/>`_
|
installed. `https://calibre-ebook.com/ <https://calibre-ebook.com/>`_
|
||||||
Typing ``make mobi`` will first create the ePUB file and then convert
|
Typing ``make mobi`` will first create the ePUB file and then convert
|
||||||
it. On the Kindle readers in particular, you also have support for PDF
|
it. On the Kindle readers in particular, you also have support for PDF
|
||||||
files, so you could download and view the PDF version as an alternative.
|
files, so you could download and view the PDF version as an alternative.
|
||||||
@ -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
|
||||||
@ -213,9 +216,20 @@ be multiple tests run automatically:
|
|||||||
- A test that only standard, printable ASCII text characters are used.
|
- A test that only standard, printable ASCII text characters are used.
|
||||||
This runs the command ``env LC_ALL=C grep -n '[^ -~]' src/*.rst`` and
|
This runs the command ``env LC_ALL=C grep -n '[^ -~]' src/*.rst`` and
|
||||||
thus prints all offending lines with filename and line number
|
thus prints all offending lines with filename and line number
|
||||||
prepended to the screen. Special characters like the Angstrom
|
prepended to the screen. Special characters like Greek letters
|
||||||
:math:`\mathrm{\mathring{A}}` should be typeset with embedded math
|
(:math:`\alpha~~\sigma~~\epsilon`), super- or subscripts
|
||||||
(like this ``:math:`\mathrm{\mathring{A}}```\ ).
|
(:math:`x^2~~\mathrm{U}_{LJ}`), mathematical expressions
|
||||||
|
(:math:`\frac{1}{2}\mathrm{N}~~x\to\infty`), or the Angstrom symbol
|
||||||
|
(:math:`\AA`) should be typeset with embedded LaTeX (like this
|
||||||
|
``:math:`\alpha \sigma \epsilon```, ``:math:`x^2 \mathrm{E}_{LJ}```,
|
||||||
|
``:math:`\frac{1}{2}\mathrm{N} x\to\infty```, or ``:math:`\AA```\ ).
|
||||||
|
|
||||||
|
- Embedded LaTeX is rendered in HTML output with `MathJax
|
||||||
|
<https://www.mathjax.org/>`_ and in PDF output by passing the embedded
|
||||||
|
text to LaTeX. Some care has to be taken, though, since there are
|
||||||
|
limitations which macros and features can be used in either mode, so
|
||||||
|
it is recommended to always check whether any new or changed
|
||||||
|
documentation does translate and render correctly with either output.
|
||||||
|
|
||||||
- A test whether all styles are documented and listed in their
|
- A test whether all styles are documented and listed in their
|
||||||
respective overview pages. A typical output with warnings looks like this:
|
respective overview pages. A typical output with warnings looks like this:
|
||||||
@ -246,6 +260,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
|
||||||
|
|||||||
@ -150,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.
|
||||||
@ -178,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
|
||||||
@ -220,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'
|
||||||
|
|||||||
@ -111,26 +111,25 @@ LAMMPS can use them if they are available on your system.
|
|||||||
files in its default search path. You must specify ``FFT_LIB``
|
files in its default search path. You must specify ``FFT_LIB``
|
||||||
with the appropriate FFT libraries to include in the link.
|
with the appropriate FFT libraries to include in the link.
|
||||||
|
|
||||||
The `KISS FFT library <http://kissfft.sf.net>`_ is included in the LAMMPS
|
The `KISS FFT library <https://github.com/mborgerding/kissfft>`_ is
|
||||||
distribution. It is portable across all platforms. Depending on the size
|
included in the LAMMPS distribution. It is portable across all
|
||||||
of the FFTs and the number of processors used, the other libraries listed
|
platforms. Depending on the size of the FFTs and the number of
|
||||||
here can be faster.
|
processors used, the other libraries listed here can be faster.
|
||||||
|
|
||||||
However, note that long-range Coulombics are only a portion of the
|
However, note that long-range Coulombics are only a portion of the
|
||||||
per-timestep CPU cost, FFTs are only a portion of long-range
|
per-timestep CPU cost, FFTs are only a portion of long-range Coulombics,
|
||||||
Coulombics, and 1d FFTs are only a portion of the FFT cost (parallel
|
and 1d FFTs are only a portion of the FFT cost (parallel communication
|
||||||
communication can be costly). A breakdown of these timings is printed
|
can be costly). A breakdown of these timings is printed to the screen
|
||||||
to the screen at the end of a run when using the
|
at the end of a run when using the :doc:`kspace_style pppm
|
||||||
:doc:`kspace_style pppm <kspace_style>` command. The
|
<kspace_style>` command. The :doc:`Screen and logfile output
|
||||||
:doc:`Screen and logfile output <Run_output>`
|
<Run_output>` page gives more details. A more detailed (and time
|
||||||
page gives more details. A more detailed (and time consuming)
|
consuming) report of the FFT performance is generated with the
|
||||||
report of the FFT performance is generated with the
|
|
||||||
:doc:`kspace_modify fftbench yes <kspace_modify>` command.
|
:doc:`kspace_modify fftbench yes <kspace_modify>` command.
|
||||||
|
|
||||||
FFTW is a fast, portable FFT library that should also work on any
|
FFTW is a fast, portable FFT library that should also work on any
|
||||||
platform and can be faster than the KISS FFT library. You can
|
platform and can be faster than the KISS FFT library. You can download
|
||||||
download it from `www.fftw.org <http://www.fftw.org>`_. LAMMPS requires
|
it from `www.fftw.org <https://www.fftw.org>`_. LAMMPS requires version
|
||||||
version 3.X; the legacy version 2.1.X is no longer supported.
|
3.X; the legacy version 2.1.X is no longer supported.
|
||||||
|
|
||||||
Building FFTW for your box should be as simple as ``./configure; make;
|
Building FFTW for your box should be as simple as ``./configure; make;
|
||||||
make install``. The install command typically requires root privileges
|
make install``. The install command typically requires root privileges
|
||||||
@ -287,8 +286,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 +327,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>`_
|
||||||
@ -99,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
|
||||||
@ -111,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.
|
||||||
@ -121,6 +132,53 @@ LAMMPS with MPI enabled.
|
|||||||
via GitHub or the `LAMMPS forum at MatSci <https://matsci.org/c/lammps/lammps-development/>`_,
|
via GitHub or the `LAMMPS forum at MatSci <https://matsci.org/c/lammps/lammps-development/>`_,
|
||||||
if you have questions or 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:
|
||||||
|
|
||||||
Using a cross-compiler
|
Using a cross-compiler
|
||||||
@ -145,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,14 @@
|
|||||||
* :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. Note that style
|
||||||
|
commands with many variants, can be more easily accessed via the small
|
||||||
|
table above.
|
||||||
|
|
||||||
.. table_from_list::
|
.. table_from_list::
|
||||||
:columns: 5
|
:columns: 5
|
||||||
@ -47,35 +50,27 @@ 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>`
|
||||||
|
* :doc:`labelmap <labelmap>`
|
||||||
* :doc:`lattice <lattice>`
|
* :doc:`lattice <lattice>`
|
||||||
* :doc:`log <log>`
|
* :doc:`log <log>`
|
||||||
* :doc:`mass <mass>`
|
* :doc:`mass <mass>`
|
||||||
* :doc:`mdi <mdi>`
|
|
||||||
* :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>`
|
||||||
@ -86,11 +81,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>`
|
||||||
@ -108,14 +100,9 @@ An alphabetic list of all general LAMMPS commands.
|
|||||||
* :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>`
|
||||||
@ -128,3 +115,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:
|
||||||
|
|
||||||
@ -43,6 +44,7 @@ OPT.
|
|||||||
* :doc:`harmonic (iko) <bond_harmonic>`
|
* :doc:`harmonic (iko) <bond_harmonic>`
|
||||||
* :doc:`harmonic/shift (o) <bond_harmonic_shift>`
|
* :doc:`harmonic/shift (o) <bond_harmonic_shift>`
|
||||||
* :doc:`harmonic/shift/cut (o) <bond_harmonic_shift_cut>`
|
* :doc:`harmonic/shift/cut (o) <bond_harmonic_shift_cut>`
|
||||||
|
* :doc:`mesocnt <bond_mesocnt>`
|
||||||
* :doc:`mm3 <bond_mm3>`
|
* :doc:`mm3 <bond_mm3>`
|
||||||
* :doc:`morse (o) <bond_morse>`
|
* :doc:`morse (o) <bond_morse>`
|
||||||
* :doc:`nonlinear (o) <bond_nonlinear>`
|
* :doc:`nonlinear (o) <bond_nonlinear>`
|
||||||
@ -74,6 +76,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>`
|
||||||
@ -88,11 +91,12 @@ 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:`mesocnt <angle_mesocnt>`
|
||||||
* :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:
|
||||||
@ -152,6 +156,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>`
|
||||||
@ -137,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>`
|
||||||
@ -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/aimd <fix_mdi_aimd>`
|
* :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>`
|
||||||
@ -159,6 +165,7 @@ 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 <fix_pair>`
|
||||||
* :doc:`phonon <fix_phonon>`
|
* :doc:`phonon <fix_phonon>`
|
||||||
* :doc:`pimd <fix_pimd>`
|
* :doc:`pimd <fix_pimd>`
|
||||||
* :doc:`planeforce <fix_planeforce>`
|
* :doc:`planeforce <fix_planeforce>`
|
||||||
|
|||||||
@ -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>`
|
||||||
@ -124,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>`
|
||||||
@ -152,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>`
|
||||||
@ -179,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>`
|
||||||
@ -194,10 +197,11 @@ 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>`
|
||||||
|
* :doc:`mesocnt/viscous <pair_mesocnt>`
|
||||||
* :doc:`mesont/tpm <pair_mesont_tpm>`
|
* :doc:`mesont/tpm <pair_mesont_tpm>`
|
||||||
* :doc:`mgpt <pair_mgpt>`
|
* :doc:`mgpt <pair_mgpt>`
|
||||||
* :doc:`mie/cut (g) <pair_mie>`
|
* :doc:`mie/cut (g) <pair_mie>`
|
||||||
@ -231,7 +235,8 @@ 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:`pace/extrapolation <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>`
|
||||||
@ -243,8 +248,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>`
|
||||||
@ -266,7 +273,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>`
|
||||||
@ -277,6 +286,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>`
|
||||||
@ -285,6 +295,7 @@ OPT.
|
|||||||
* :doc:`vashishta (gko) <pair_vashishta>`
|
* :doc:`vashishta (gko) <pair_vashishta>`
|
||||||
* :doc:`vashishta/table (o) <pair_vashishta>`
|
* :doc:`vashishta/table (o) <pair_vashishta>`
|
||||||
* :doc:`wf/cut <pair_wf_cut>`
|
* :doc:`wf/cut <pair_wf_cut>`
|
||||||
|
* :doc:`ylz <pair_ylz>`
|
||||||
* :doc:`yukawa (gko) <pair_yukawa>`
|
* :doc:`yukawa (gko) <pair_yukawa>`
|
||||||
* :doc:`yukawa/colloid (go) <pair_yukawa_colloid>`
|
* :doc:`yukawa/colloid (go) <pair_yukawa_colloid>`
|
||||||
* :doc:`zbl (gko) <pair_zbl>`
|
* :doc:`zbl (gko) <pair_zbl>`
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -276,10 +276,27 @@ 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
|
GNU makefiles. Some examples that can be used as a template are in the
|
||||||
``examples/plugins`` folder. The CMake script code has some small
|
``examples/plugins`` folder. The CMake script code has some small
|
||||||
adjustments to allow building the plugins for running unit tests with
|
adjustments to allow building the plugins for running unit tests with
|
||||||
them. Another example that converts the KIM package into a plugin can be
|
them.
|
||||||
found in the ``examples/kim/plugin`` folder. No changes to the sources
|
|
||||||
of the KIM package themselves are needed; only the plugin interface and
|
Another example that converts the KIM package into a plugin can be found
|
||||||
loader code needs to be added. This example only supports building with
|
in the ``examples/kim/plugin`` folder. No changes to the sources of the
|
||||||
CMake, but is probably a more typical example. To compile you need to
|
KIM package themselves are needed; only the plugin interface and loader
|
||||||
run CMake with -DLAMMPS_SOURCE_DIR=<path/to/lammps/src/folder>. Other
|
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.
|
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.
|
||||||
|
|||||||
425
doc/src/Developer_updating.rst
Normal file
425
doc/src/Developer_updating.rst
Normal file
@ -0,0 +1,425 @@
|
|||||||
|
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 developers@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`_
|
||||||
|
- `Use Output::get_dump_by_id() instead of Output::find_dump()`_
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
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:: 15Sep2022
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Use Output::get_dump_by_id() instead of Output::find_dump()
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. versionchanged:: 15Sep2022
|
||||||
|
|
||||||
|
The accessor function to individual dump style instances has been changed
|
||||||
|
from ``Output::find_dump()`` returning the index of the dump instance in
|
||||||
|
the list of dumps to ``Output::get_dump_by_id()`` returning a pointer to
|
||||||
|
the dump directly. Example:
|
||||||
|
|
||||||
|
Old:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
int idump = output->find_dump(arg[iarg+1]);
|
||||||
|
if (idump < 0)
|
||||||
|
error->all(FLERR,"Dump ID in hyper command does not exist");
|
||||||
|
memory->grow(dumplist,ndump+1,"hyper:dumplist");
|
||||||
|
dumplist[ndump++] = idump;
|
||||||
|
|
||||||
|
[...]
|
||||||
|
|
||||||
|
if (dumpflag)
|
||||||
|
for (int idump = 0; idump < ndump; idump++)
|
||||||
|
output->dump[dumplist[idump]]->write();
|
||||||
|
|
||||||
|
New:
|
||||||
|
|
||||||
|
.. code-block:: C++
|
||||||
|
|
||||||
|
auto idump = output->get_dump_by_id(arg[iarg+1]);
|
||||||
|
if (!idump) error->all(FLERR,"Dump ID {} in hyper command does not exist", arg[iarg+1]);
|
||||||
|
dumplist.emplace_back(idump);
|
||||||
|
|
||||||
|
[...]
|
||||||
|
|
||||||
|
if (dumpflag) for (auto idump : dumplist) idump->write();
|
||||||
|
|
||||||
|
This change is **required** or else the code will not compile.
|
||||||
@ -154,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
|
||||||
|
|
||||||
@ -172,6 +175,12 @@ and parsing files or arguments.
|
|||||||
.. doxygenfunction:: is_double
|
.. doxygenfunction:: is_double
|
||||||
:project: progguide
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: is_id
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: is_type
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
Potential file functions
|
Potential file functions
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@ -202,15 +211,24 @@ Argument processing
|
|||||||
.. doxygenfunction:: expand_args
|
.. doxygenfunction:: expand_args
|
||||||
:project: progguide
|
:project: progguide
|
||||||
|
|
||||||
|
.. doxygenfunction:: expand_type
|
||||||
|
:project: progguide
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
@ -240,6 +258,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
|
||||||
|
|||||||
@ -75,7 +75,7 @@ Using the GDB debugger to get a stack trace
|
|||||||
There are two options to use the GDB debugger for identifying the origin
|
There are two options to use the GDB debugger for identifying the origin
|
||||||
of the segmentation fault or similar crash. The GDB debugger has many
|
of the segmentation fault or similar crash. The GDB debugger has many
|
||||||
more features and options, as can be seen for example its `online
|
more features and options, as can be seen for example its `online
|
||||||
documentation <http://sourceware.org/gdb/current/onlinedocs/gdb/>`_.
|
documentation <https://sourceware.org/gdb/current/onlinedocs/gdb/>`_.
|
||||||
|
|
||||||
Run LAMMPS from within the debugger
|
Run LAMMPS from within the debugger
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|||||||
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.
|
||||||
|
|
||||||
@ -5453,6 +5453,11 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
|||||||
Mass command must set a type from 1-N where N is the number of atom
|
Mass command must set a type from 1-N where N is the number of atom
|
||||||
types.
|
types.
|
||||||
|
|
||||||
|
*Invalid label2type() function syntax in variable formula*
|
||||||
|
The first argument must be a label map kind (atom, bond, angle,
|
||||||
|
dihedral, or improper) and the second argument must be a valid type
|
||||||
|
label that has been assigned to a numeric type.
|
||||||
|
|
||||||
*Invalid use of library file() function*
|
*Invalid use of library file() function*
|
||||||
This function is called through the library interface. This
|
This function is called through the library interface. This
|
||||||
error should not occur. Contact the developers if it does.
|
error should not occur. Contact the developers if it does.
|
||||||
@ -5585,9 +5590,18 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
|||||||
*LJ6 off not supported in pair_style buck/long/coul/long*
|
*LJ6 off not supported in pair_style buck/long/coul/long*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
|
*Label map is incomplete: all types must be assigned a unique type label*
|
||||||
|
For a given type-kind (atom types, bond types, etc.) to be written to
|
||||||
|
the data file, all associated types must be assigned a type label, and
|
||||||
|
each type label can be assigned to only one numeric type.
|
||||||
|
|
||||||
*Label wasn't found in input script*
|
*Label wasn't found in input script*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
|
*Labelmap command before simulation box is defined*
|
||||||
|
The labelmap command cannot be used before a read_data,
|
||||||
|
read_restart, or create_box command.
|
||||||
|
|
||||||
*Lattice orient vectors are not orthogonal*
|
*Lattice orient vectors are not orthogonal*
|
||||||
The three specified lattice orientation vectors must be mutually
|
The three specified lattice orientation vectors must be mutually
|
||||||
orthogonal.
|
orthogonal.
|
||||||
@ -5863,6 +5877,12 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
|||||||
*Must not have multiple fixes change box parameter ...*
|
*Must not have multiple fixes change box parameter ...*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
|
*Must read Angle Type Labels before Angles*
|
||||||
|
An Angle Type Labels section of a data file must come before the Angles section.
|
||||||
|
|
||||||
|
*Must read Atom Type Labels before Atoms*
|
||||||
|
An Atom Type Labels section of a data file must come before the Atoms section.
|
||||||
|
|
||||||
*Must read Atoms before Angles*
|
*Must read Atoms before Angles*
|
||||||
The Atoms section of a data file must come before an Angles section.
|
The Atoms section of a data file must come before an Angles section.
|
||||||
|
|
||||||
@ -5893,6 +5913,15 @@ Doc page with :doc:`WARNING messages <Errors_warnings>`
|
|||||||
The Atoms section of a data file must come before a Velocities
|
The Atoms section of a data file must come before a Velocities
|
||||||
section.
|
section.
|
||||||
|
|
||||||
|
*Must read Bond Type Labels before Bonds*
|
||||||
|
A Bond Type Labels section of a data file must come before the Bonds section.
|
||||||
|
|
||||||
|
*Must read Dihedral Type Labels before Dihedrals*
|
||||||
|
An Dihedral Type Labels section of a data file must come before the Dihedrals section.
|
||||||
|
|
||||||
|
*Must read Improper Type Labels before Impropers*
|
||||||
|
An Improper Type Labels section of a data file must come before the Impropers section.
|
||||||
|
|
||||||
*Must re-specify non-restarted pair style (xxx) after read_restart*
|
*Must re-specify non-restarted pair style (xxx) after read_restart*
|
||||||
For pair styles, that do not store their settings in a restart file,
|
For pair styles, that do not store their settings in a restart file,
|
||||||
it must be defined with a new 'pair_style' command after read_restart.
|
it must be defined with a new 'pair_style' command after read_restart.
|
||||||
@ -6782,7 +6811,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*
|
||||||
@ -7849,6 +7878,10 @@ keyword to allow for additional bonds to be formed
|
|||||||
Number of local atoms times number of columns must fit in a 32-bit
|
Number of local atoms times number of columns must fit in a 32-bit
|
||||||
integer for dump.
|
integer for dump.
|
||||||
|
|
||||||
|
*Topology type exceeds system topology type*
|
||||||
|
The number of bond, angle, etc types exceeds the system setting. See
|
||||||
|
the create_box or read_data command for how to specify these values.
|
||||||
|
|
||||||
*Tree structure in joint connections*
|
*Tree structure in joint connections*
|
||||||
Fix poems cannot (yet) work with coupled bodies whose joints connect
|
Fix poems cannot (yet) work with coupled bodies whose joints connect
|
||||||
the bodies in a tree structure.
|
the bodies in a tree structure.
|
||||||
@ -7873,6 +7906,13 @@ keyword to allow for additional bonds to be formed
|
|||||||
*Two groups cannot be the same in fix spring couple*
|
*Two groups cannot be the same in fix spring couple*
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
|
*The %s type label %s is already in use for type %s*
|
||||||
|
For a given type-kind (atom types, bond types, etc.), a given type
|
||||||
|
label can be assigned to only one numeric type.
|
||||||
|
|
||||||
|
*Type label string %s for %s type %s is invalid*
|
||||||
|
See the labelmap command documentation for valid type labels.
|
||||||
|
|
||||||
*Unable to initialize accelerator for use*
|
*Unable to initialize accelerator for use*
|
||||||
There was a problem initializing an accelerator for the gpu package
|
There was a problem initializing an accelerator for the gpu package
|
||||||
|
|
||||||
|
|||||||
@ -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.
|
||||||
|
|
||||||
|
|||||||
1451
doc/src/Fortran.rst
1451
doc/src/Fortran.rst
File diff suppressed because it is too large
Load Diff
@ -34,6 +34,7 @@ Settings howto
|
|||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
Howto_2d
|
Howto_2d
|
||||||
|
Howto_type_labels
|
||||||
Howto_triclinic
|
Howto_triclinic
|
||||||
Howto_thermostat
|
Howto_thermostat
|
||||||
Howto_barostat
|
Howto_barostat
|
||||||
@ -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
|
||||||
@ -83,6 +85,7 @@ Packages howto
|
|||||||
Howto_coreshell
|
Howto_coreshell
|
||||||
Howto_drude
|
Howto_drude
|
||||||
Howto_drude2
|
Howto_drude2
|
||||||
|
Howto_peri
|
||||||
Howto_manifold
|
Howto_manifold
|
||||||
Howto_spins
|
Howto_spins
|
||||||
|
|
||||||
|
|||||||
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:
|
||||||
|
|
||||||
|
* `https://openbabel.org/docs/current/FileFormats/Tinker_XYZ_format.html <https://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.
|
||||||
|
|
||||||
@ -3,24 +3,20 @@ CHARMM, AMBER, COMPASS, and DREIDING force fields
|
|||||||
|
|
||||||
A force field has 2 parts: the formulas that define it and the
|
A force field has 2 parts: the formulas that define it and the
|
||||||
coefficients used for a particular system. Here we only discuss
|
coefficients used for a particular system. Here we only discuss
|
||||||
formulas implemented in LAMMPS that correspond to formulas commonly
|
formulas implemented in LAMMPS that correspond to formulas commonly used
|
||||||
used in the CHARMM, AMBER, COMPASS, and DREIDING force fields. Setting
|
in the CHARMM, AMBER, COMPASS, and DREIDING force fields. Setting
|
||||||
coefficients is done either from special sections in an input data file
|
coefficients is done either from special sections in an input data file
|
||||||
via the :doc:`read_data <read_data>` command or in the input script with
|
via the :doc:`read_data <read_data>` command or in the input script with
|
||||||
commands like :doc:`pair_coeff <pair_coeff>` or
|
commands like :doc:`pair_coeff <pair_coeff>` or :doc:`bond_coeff
|
||||||
:doc:`bond_coeff <bond_coeff>` and so on. See the :doc:`Tools <Tools>` doc
|
<bond_coeff>` and so on. See the :doc:`Tools <Tools>` doc page for
|
||||||
page for additional tools that can use CHARMM, AMBER, or Materials
|
additional tools that can use CHARMM, AMBER, or Materials Studio
|
||||||
Studio generated files to assign force field coefficients and convert
|
generated files to assign force field coefficients and convert their
|
||||||
their output into LAMMPS input.
|
output into LAMMPS input.
|
||||||
|
|
||||||
See :ref:`(MacKerell) <howto-MacKerell>` for a description of the CHARMM force
|
See :ref:`(MacKerell) <howto-MacKerell>` for a description of the CHARMM
|
||||||
field. See :ref:`(Cornell) <howto-Cornell>` for a description of the AMBER
|
force field. See :ref:`(Cornell) <howto-Cornell>` for a description of
|
||||||
force field. See :ref:`(Sun) <howto-Sun>` for a description of the COMPASS
|
the AMBER force field. See :ref:`(Sun) <howto-Sun>` for a description
|
||||||
force field.
|
of the COMPASS force field.
|
||||||
|
|
||||||
.. _charmm: http://www.scripps.edu/brooks
|
|
||||||
|
|
||||||
.. _amber: http://amber.scripps.edu
|
|
||||||
|
|
||||||
The interaction styles listed below compute force field formulas that
|
The interaction styles listed below compute force field formulas that
|
||||||
are consistent with common options in CHARMM or AMBER. See each
|
are consistent with common options in CHARMM or AMBER. See each
|
||||||
@ -41,9 +37,10 @@ command's documentation for the formula it computes.
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
For CHARMM, newer *charmmfsw* or *charmmfsh* styles were released
|
For CHARMM, newer *charmmfsw* or *charmmfsh* styles were released in
|
||||||
in March 2017. We recommend they be used instead of the older *charmm*
|
March 2017. We recommend they be used instead of the older *charmm*
|
||||||
styles. See discussion of the differences on the :doc:`pair charmm <pair_charmm>` and :doc:`dihedral charmm <dihedral_charmm>` doc
|
styles. See discussion of the differences on the :doc:`pair charmm
|
||||||
|
<pair_charmm>` and :doc:`dihedral charmm <dihedral_charmm>` doc
|
||||||
pages.
|
pages.
|
||||||
|
|
||||||
COMPASS is a general force field for atomistic simulation of common
|
COMPASS is a general force field for atomistic simulation of common
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -3,7 +3,6 @@ Bonded particle models
|
|||||||
|
|
||||||
The BPM package implements bonded particle models which can be used to
|
The BPM package implements bonded particle models which can be used to
|
||||||
simulate mesoscale solids. Solids are constructed as a collection of
|
simulate mesoscale solids. Solids are constructed as a collection of
|
||||||
|
|
||||||
particles which each represent a coarse-grained region of space much
|
particles which each represent a coarse-grained region of space much
|
||||||
larger than the atomistic scale. Particles within a solid region are
|
larger than the atomistic scale. Particles within a solid region are
|
||||||
then connected by a network of bonds to provide solid elasticity.
|
then connected by a network of bonds to provide solid elasticity.
|
||||||
@ -34,50 +33,6 @@ reference state of a bond. Bonds that are created midway into a run,
|
|||||||
such as those created by pouring grains using :doc:`fix pour
|
such as those created by pouring grains using :doc:`fix pour
|
||||||
<fix_pour>`, are initialized on that timestep.
|
<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
|
Currently there are two types of bonds included in the BPM
|
||||||
@ -96,12 +51,6 @@ This also requires a unique integrator :doc:`fix nve/bpm/sphere
|
|||||||
<fix_nve_bpm_sphere>` which numerically integrates orientation similar
|
<fix_nve_bpm_sphere>` which numerically integrates orientation similar
|
||||||
to :doc:`fix nve/asphere <fix_nve_asphere>`.
|
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
|
In addition to bond styles, a new pair style :doc:`pair bpm/spring
|
||||||
<pair_bpm_spring>` was added to accompany the bpm/spring bond
|
<pair_bpm_spring>` was added to accompany the bpm/spring bond
|
||||||
style. This pair style is simply a hookean repulsion with similar
|
style. This pair style is simply a hookean repulsion with similar
|
||||||
@ -109,6 +58,73 @@ velocity damping as its sister bond style.
|
|||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
Bond data can be output using a combination of standard LAMMPS commands.
|
||||||
|
A list of IDs for bonded atoms can be generated using the
|
||||||
|
:doc:`compute property/local <compute_property_local>` command.
|
||||||
|
Various properties of bonds can be computed using the
|
||||||
|
:doc:`compute bond/local <compute_bond_local>` command. This
|
||||||
|
command allows one to access data saved to the bond's history
|
||||||
|
such as the reference length of the bond. More information on
|
||||||
|
bond history data can be found on the documentation pages for the specific
|
||||||
|
BPM bond styles. Finally, this data can be output using a :doc:`dump local <dump>`
|
||||||
|
command. As one may output many columns from the same compute, the
|
||||||
|
:doc:`dump modify <dump_modify>` *colname* option may be used to provide
|
||||||
|
more helpful column names. An example of this procedure is found in
|
||||||
|
/examples/bpm/pour/. External software, such as OVITO, can read these dump
|
||||||
|
files to render bond data.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
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 overlay
|
||||||
|
pair forces with bond forces 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
|
||||||
|
|
||||||
|
Alternatively, 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 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.
|
||||||
|
|
||||||
|
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. Since one may frequently output
|
||||||
|
a list of broken bonds and the time they broke, the
|
||||||
|
:doc:`dump modify <dump_modify>` option *header no* may be useful to
|
||||||
|
avoid repeatedly printing the header of the dump file. An example of
|
||||||
|
this procedure is found in /examples/bpm/impact/. Additionally,
|
||||||
|
one can use :doc:`compute nbond/atom <compute_nbond_atom>` to tally the
|
||||||
|
current number of bonds per atom.
|
||||||
|
|
||||||
|
See the :doc:`Howto <Howto_broken_bonds>` page on broken bonds for
|
||||||
|
more information.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
While LAMMPS has many utilities to create and delete bonds, *only*
|
While LAMMPS has many utilities to create and delete bonds, *only*
|
||||||
the following are currently compatible with BPM bond styles:
|
the following are currently compatible with BPM bond styles:
|
||||||
|
|
||||||
|
|||||||
@ -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).
|
||||||
|
|||||||
@ -10,7 +10,7 @@ changes or additions you have made to LAMMPS into the official LAMMPS
|
|||||||
distribution. It uses the process of updating this very tutorial as an
|
distribution. It uses the process of updating this very tutorial as an
|
||||||
example to describe the individual steps and options. You need to be
|
example to describe the individual steps and options. You need to be
|
||||||
familiar with git and you may want to have a look at the `git book
|
familiar with git and you may want to have a look at the `git book
|
||||||
<http://git-scm.com/book/>`_ to familiarize yourself with some of the
|
<https://git-scm.com/book/>`_ to familiarize yourself with some of the
|
||||||
more advanced git features used below.
|
more advanced git features used below.
|
||||||
|
|
||||||
As of fall 2016, submitting contributions to LAMMPS via pull requests
|
As of fall 2016, submitting contributions to LAMMPS via pull requests
|
||||||
|
|||||||
@ -47,4 +47,4 @@ to the relevant fixes.
|
|||||||
.. _Paquay1:
|
.. _Paquay1:
|
||||||
|
|
||||||
**(Paquay)** Paquay and Kusters, Biophys. J., 110, 6, (2016).
|
**(Paquay)** Paquay and Kusters, Biophys. J., 110, 6, (2016).
|
||||||
preprint available at `arXiv:1411.3019 <http://arxiv.org/abs/1411.3019/>`_.
|
preprint available at `arXiv:1411.3019 <https://arxiv.org/abs/1411.3019/>`_.
|
||||||
|
|||||||
@ -5,9 +5,9 @@ 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"
|
"client" and sends request messages (data) to one (or more) "server"
|
||||||
code(s). A server responds to each request with a reply message
|
code(s). A server responds to each request with a reply message
|
||||||
(data). This enables two (or more) codes to work in tandem to perform
|
(data). This enables two (or more) codes to work in tandem to perform
|
||||||
a simulation. LAMMPS can act as either a client or server code; it
|
a simulation. In this context, LAMMPS can act as either a client or
|
||||||
does this by using the `MolSSI Driver Interface (MDI) library
|
server code. It does this by using the `MolSSI Driver Interface (MDI)
|
||||||
<https://molssi-mdi.github.io/MDI_Library/html/index.html>`_,
|
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>`_, which is supported by the :ref:`MDI <PKG-MDI>`
|
<https://molssi.org>`_, which is supported by the :ref:`MDI <PKG-MDI>`
|
||||||
package.
|
package.
|
||||||
@ -63,22 +63,39 @@ 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
|
enables LAMMPS to operate as an MDI driver and load an MDI engine as a
|
||||||
plugin library.
|
plugin library.
|
||||||
|
|
||||||
The package also has a `fix mdi/aimd <fix_mdi_aimd>` command in which
|
The package also has a `fix mdi/qm <fix_mdi_qm>` command in which
|
||||||
LAMMPS operates as an MDI driver to perform *ab initio* MD simulations
|
LAMMPS operates as an MDI driver in conjunction with a quantum
|
||||||
in conjunction with a quantum mechanics code. Its post_force() method
|
mechanics code as an MDI engine. The post_force() method of the
|
||||||
illustrates how a driver issues MDI commands to another code. This
|
fix_mdi_qm.cpp file shows how a driver issues MDI commands to another
|
||||||
command can be used to couple to an MDI engine which is either a
|
code. This command can be used to couple to an MDI engine which is
|
||||||
stand-alone code or a plugin library.
|
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
|
The examples/mdi directory contains Python scripts and LAMMPS input
|
||||||
script which use LAMMPS as either an MDI driver or engine or both.
|
script which use LAMMPS as either an MDI driver or engine or both.
|
||||||
Three example use cases are provided:
|
Currently, 5 example use cases are provided:
|
||||||
|
|
||||||
* Run ab initio MD (AIMD) using 2 instances of LAMMPS, one as driver
|
* Run ab initio MD (AIMD) using 2 instances of LAMMPS. As a driver
|
||||||
and one as an engine. As an engine, LAMMPS is a surrogate for a
|
LAMMPS performs the timestepping in either NVE or NPT mode. As an
|
||||||
quantum code.
|
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
|
* A Python script driver invokes a sequence of unrelated LAMMPS
|
||||||
calculations. Calculations can be single-point energy/force
|
calculations. Calculations can be single-point energy/force
|
||||||
@ -91,20 +108,22 @@ Three example use cases are provided:
|
|||||||
|
|
||||||
Note that in any of these example where LAMMPS is used as an engine,
|
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,
|
an actual QM code (which supports MDI) could be used in its place,
|
||||||
without modifying other code or scripts, except to specify the name of
|
without modifying the input scripts or launch commands, except to
|
||||||
the QM code.
|
specify the name of the QM code.
|
||||||
|
|
||||||
The examples/mdi/README file explains how to launch both driver and
|
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
|
engine codes so that they communicate using the MDI library via either
|
||||||
MPI or sockets.
|
MPI or sockets. Or using the engine as a stand-alone code or plugin
|
||||||
|
library.
|
||||||
|
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
Currently there are two quantum DFT codes which have direct MDI
|
Currently there are at least two quantum DFT codes which have direct
|
||||||
support, `Quantum ESPRESSO (QE) <https://www.quantum-espresso.org/>`_
|
MDI support, `Quantum ESPRESSO (QE)
|
||||||
and `INQ <https://qsg.llnl.gov/node/101.html>`_. There are also
|
<https://www.quantum-espresso.org/>`_ and `INQ
|
||||||
several QM codes which have indirect support through QCEngine or i-PI.
|
<https://qsg.llnl.gov/node/101.html>`_. There are also several QM
|
||||||
The former means they require a wrapper program (QCEngine) with MDI
|
codes which have indirect support through QCEngine or i-PI. The
|
||||||
|
former means they require a wrapper program (QCEngine) with MDI
|
||||||
support which writes/read files to pass data to the quantum code
|
support which writes/read files to pass data to the quantum code
|
||||||
itself. The list of QCEngine-supported and i-PI-supported quantum
|
itself. The list of QCEngine-supported and i-PI-supported quantum
|
||||||
codes is on the `MDI webpage
|
codes is on the `MDI webpage
|
||||||
|
|||||||
1078
doc/src/Howto_peri.rst
Normal file
1078
doc/src/Howto_peri.rst
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
|
||||||
@ -38,7 +38,7 @@ the partial charge assignments change:
|
|||||||
See the :ref:`(Berendsen) <howto-Berendsen>` reference for more details on both
|
See the :ref:`(Berendsen) <howto-Berendsen>` reference for more details on both
|
||||||
the SPC and SPC/E models.
|
the SPC and SPC/E models.
|
||||||
|
|
||||||
Wikipedia also has a nice article on `water models <http://en.wikipedia.org/wiki/Water_model>`_.
|
Wikipedia also has a nice article on `water models <https://en.wikipedia.org/wiki/Water_model>`_.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user