diff --git a/.gitattributes b/.gitattributes index f81d32a235..77eb7f93f3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,6 +3,7 @@ .github export-ignore .lgtm.yml export-ignore SECURITY.md export-ignore +CITATION.cff export-ignore * text=auto *.jpg -text *.pdf -text diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ba702784f4..4e8803fc5a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -13,20 +13,21 @@ lib/kim/* @ellio167 lib/mesont/* @iafoss # whole packages +src/AMOEBA/* @sjplimp src/COMPRESS/* @rbberger src/GPU/* @ndtrung81 src/KOKKOS/* @stanmoore1 src/KIM/* @ellio167 src/LATTE/* @cnegre -src/MESSAGE/* @sjplimp src/MLIAP/* @athomps src/SNAP/* @athomps src/SPIN/* @julient31 src/BROWNIAN/* @samueljmcameron src/CG-DNA/* @ohenrich -src/CG-SDK/* @akohlmey +src/CG-SPICA/* @yskmiyazaki src/COLVARS/* @giacomofiorin src/DIELECTRIC/* @ndtrung81 +src/ELECTRODE/* @ludwig-ahrens src/FEP/* @agiliopadua src/ML-HDNNP/* @singraber src/INTEL/* @wmbrownintel @@ -133,6 +134,7 @@ tools/coding_standard/* @rbberger tools/valgrind/* @akohlmey tools/swig/* @akohlmey tools/offline/* @rbberger +tools/vim/* @hammondkd # tests unittest/* @akohlmey @rbberger diff --git a/.github/ISSUE_TEMPLATE/help_request.md b/.github/ISSUE_TEMPLATE/help_request.md index 5e5b3ebffd..bde37650b2 100644 --- a/.github/ISSUE_TEMPLATE/help_request.md +++ b/.github/ISSUE_TEMPLATE/help_request.md @@ -1,6 +1,6 @@ --- name: Request for Help -about: "Don't post help requests here, email the lammps-users mailing list" +about: "Don't post help requests here, post in the LAMMPS forum" title: "" labels: invalid assignees: '' @@ -8,8 +8,9 @@ assignees: '' --- Please **do not** post requests for help (e.g. with installing or using LAMMPS) here. -Instead send an e-mail to the lammps-users mailing list. +Instead, you can post to the LAMMPS category in the Materials Science Community +Discourse forum at: https://matsci.org/lammps/ This issue tracker is for tracking LAMMPS development related issues only. -Thanks for your cooperation. +Thank you in advance for your cooperation. diff --git a/.github/codecov.yml b/.github/codecov.yml index 4645f52f7f..3c4ff888a4 100644 --- a/.github/codecov.yml +++ b/.github/codecov.yml @@ -7,7 +7,7 @@ coverage: threshold: 10% only_pulls: false branches: - - "master" + - "develop" flags: - "unit" paths: @@ -16,14 +16,14 @@ coverage: project: default: branches: - - "master" + - "develop" paths: - "src" informational: true patch: default: branches: - - "master" + - "develop" paths: - "src" informational: true diff --git a/.github/workflows/compile-msvc.yml b/.github/workflows/compile-msvc.yml index 7747be7b46..3ec5fc4cb0 100644 --- a/.github/workflows/compile-msvc.yml +++ b/.github/workflows/compile-msvc.yml @@ -3,7 +3,11 @@ name: "Native Windows Compilation and Unit Tests" on: push: - branches: [develop] + branches: + - develop + pull_request: + branches: + - develop workflow_dispatch: diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml new file mode 100644 index 0000000000..7bda3a071f --- /dev/null +++ b/.github/workflows/coverity.yml @@ -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 diff --git a/.github/workflows/unittest-macos.yml b/.github/workflows/unittest-macos.yml index e6e5ccfdc8..2d29eac83e 100644 --- a/.github/workflows/unittest-macos.yml +++ b/.github/workflows/unittest-macos.yml @@ -3,7 +3,11 @@ name: "Unittest for MacOS" on: push: - branches: [develop] + branches: + - develop + pull_request: + branches: + - develop workflow_dispatch: @@ -39,6 +43,7 @@ jobs: working-directory: build run: | ccache -z + python3 -m pip install numpy python3 -m pip install pyyaml cmake -C ../cmake/presets/clang.cmake \ -C ../cmake/presets/most.cmake \ diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000000..a8712ddcf2 --- /dev/null +++ b/CITATION.cff @@ -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" diff --git a/README b/README index bb0f335848..c25506e2c0 100644 --- a/README +++ b/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 under the terms of the GNU Public License (GPL) version 2. -The primary author of the code is Steve Plimpton, who can be emailed -at sjplimp@sandia.gov. The LAMMPS WWW Site at www.lammps.org has +The code is maintained by the LAMMPS development team who can be emailed +at developers@lammps.org. The LAMMPS WWW Site at www.lammps.org has more information about the code and its uses. The LAMMPS distribution includes the following files and directories: diff --git a/SECURITY.md b/SECURITY.md index f06b781d11..7b0ed1f560 100644 --- a/SECURITY.md +++ b/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. 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 "administrator" account directly or indirectly via "sudo" or "su". 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 -the LAMMPS project -[issue tracker on GitHub](https://github.com/lammps/lammps/issues). +either a user mistake or a bug in the code. Bugs can be reported in the +LAMMPS project [issue tracker on +GitHub](https://github.com/lammps/lammps/issues). To mitigate issues with using homoglyphs or bidirectional reordering in 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 -LAMMPS follows continuous release development model. We aim to keep all -release versions (stable or patch) fully functional and employ a variety -of automatic testing procedures to detect failures of existing -functionality from adding new features before releases are made. Thus -bugfixes and updates are only integrated into the current development -branch and thus the next (patch) release and users are recommended to -update regularly. +LAMMPS follows continuous release development model. We aim to keep to +keep the development version (develop branch) always fully functional +and employ a variety of automatic testing procedures to detect failures +of existing functionality from adding or modifying features. Most of +those tests are run on pull requests *before* merging to the development +branch. The develop branch is protected, so all changes *must* be +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. diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 42d3de00d6..efdbfa2840 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -7,11 +7,20 @@ cmake_minimum_required(VERSION 3.10) if(POLICY CMP0074) cmake_policy(SET CMP0074 NEW) 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 # pythonx.y-config when cross-compiling. review occasionally if it may be set to NEW if(POLICY CMP0109) cmake_policy(SET CMP0109 OLD) 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) @@ -100,7 +109,7 @@ 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) set(CMAKE_TUNE_DEFAULT "-xCOMMON-AVX512") 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() @@ -135,13 +144,11 @@ 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 # and prints lots of pointless warnings about "unsafe" functions if(MSVC) - if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")) add_compile_options(/Zc:__cplusplus) add_compile_options(/wd4244) add_compile_options(/wd4267) - if(LAMMPS_EXCEPTIONS) - add_compile_options(/EHsc) - endif() + add_compile_options(/EHsc) endif() add_compile_definitions(_CRT_SECURE_NO_WARNINGS) endif() @@ -154,6 +161,19 @@ endif() ######################################################################## # 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") mark_as_advanced(LAMMPS_MACHINE) if(LAMMPS_MACHINE) @@ -203,7 +223,7 @@ set(STANDARD_PACKAGES BPM BROWNIAN CG-DNA - CG-SDK + CG-SPICA CLASS2 COLLOID COLVARS @@ -365,12 +385,13 @@ pkg_depends(DIELECTRIC EXTRA-PAIR) pkg_depends(CG-DNA MOLECULE) pkg_depends(CG-DNA ASPHERE) pkg_depends(ELECTRODE KSPACE) +pkg_depends(EXTRA-MOLECULE MOLECULE) # 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) +find_package(OpenMP COMPONENTS CXX QUIET) +if(OpenMP_CXX_FOUND) + check_omp_h_include() if(HAVE_OMP_H_INCLUDE) set(BUILD_OMP_DEFAULT ON) endif() @@ -379,8 +400,8 @@ 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) + find_package(OpenMP COMPONENTS CXX REQUIRED) + check_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() @@ -404,9 +425,11 @@ endif() if(PKG_MSCG OR PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_LATTE OR PKG_ELECTRODE) enable_language(C) - find_package(LAPACK) - find_package(BLAS) - if(NOT LAPACK_FOUND OR NOT BLAS_FOUND) + if (NOT USE_INTERNAL_LINALG) + find_package(LAPACK) + find_package(BLAS) + endif() + if(NOT LAPACK_FOUND OR NOT BLAS_FOUND OR USE_INTERNAL_LINALG) include(CheckGeneratorSupport) if(NOT CMAKE_GENERATOR_SUPPORT_FORTRAN) status(FATAL_ERROR "Cannot build internal linear algebra library as CMake build tool lacks Fortran support") @@ -635,7 +658,7 @@ endif() # packages which selectively include variants based on enabled styles # 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}) include(Packages/${PKG_WITH_INCL}) endif() @@ -708,18 +731,17 @@ list(FIND LANGUAGES "Fortran" _index) if(_index GREATER -1) target_link_libraries(lammps PRIVATE ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}) 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 - 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 - pair.h pointers.h region.h timer.h universe.h update.h utils.h variable.h) -if(LAMMPS_EXCEPTIONS) - list(APPEND LAMMPS_CXX_HEADERS exceptions.h) -endif() +set(LAMMPS_CXX_HEADERS angle.h atom.h bond.h citeme.h comm.h command.h compute.h dihedral.h domain.h + error.h exceptions.h fix.h force.h group.h improper.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 pair.h + platform.h pointers.h region.h timer.h universe.h update.h utils.h variable.h) +set(LAMMPS_FMT_HEADERS core.h format.h) set_target_properties(lammps PROPERTIES OUTPUT_NAME lammps${LAMMPS_MACHINE}) set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION}) set_target_properties(lammps PROPERTIES PREFIX "lib") target_include_directories(lammps PUBLIC $) -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}) 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}) @@ -728,6 +750,14 @@ foreach(_HEADER ${LAMMPS_CXX_HEADERS}) install(FILES ${LAMMPS_SOURCE_DIR}/${_HEADER} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps) endif() 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 $) add_library(LAMMPS::lammps ALIAS lammps) get_target_property(LAMMPS_DEFINES lammps INTERFACE_COMPILE_DEFINITIONS) @@ -782,9 +812,13 @@ if(BUILD_SHARED_LIBS) 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 if(PYTHONINTERP_FOUND) - set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) + set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) endif() else() + # backward compatibility + if(PYTHON_EXECUTABLE) + set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) + endif() find_package(Python COMPONENTS Interpreter) endif() if(BUILD_IS_MULTI_CONFIG) @@ -817,16 +851,25 @@ endif() ############################################################################### if(BUILD_SHARED_LIBS OR PKG_PYTHON) 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 if(PYTHONINTERP_FOUND) - set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) + set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) endif() else() + # backward compatibility + if(PYTHON_EXECUTABLE) + set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) + endif() find_package(Python COMPONENTS Interpreter) endif() if(Python_EXECUTABLE) - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/python) - 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/lib) + 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() @@ -937,9 +980,6 @@ if(PKG_GPU) endif() message(STATUS "GPU precision: ${GPU_PREC}") endif() -if(PKG_KOKKOS) - message(STATUS "Kokkos Arch: ${KOKKOS_ARCH}") -endif() if(PKG_KSPACE) message(STATUS "<<< FFT settings >>> -- Primary FFT lib: ${FFT}") diff --git a/cmake/Modules/FindClangFormat.cmake b/cmake/Modules/FindClangFormat.cmake index 48393f0614..80c3b0d0ae 100644 --- a/cmake/Modules/FindClangFormat.cmake +++ b/cmake/Modules/FindClangFormat.cmake @@ -1,5 +1,10 @@ # Find 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-9.0 clang-format-8.0 @@ -14,19 +19,27 @@ if(ClangFormat_EXECUTABLE) OUTPUT_VARIABLE clang_format_version ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - - if(clang_format_version MATCHES "^clang-format version .*") - # Arch Linux + if(clang_format_version MATCHES "^(Ubuntu |)clang-format version .*") + # Arch Linux output: # 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) - 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 "${clang_format_version}") elseif(clang_format_version MATCHES ".*LLVM version .*") - # CentOS 7 Output + # CentOS 7 output: # LLVM (http://llvm.org/): # LLVM version 3.4.2 # Optimized build. diff --git a/cmake/Modules/FindCythonize.cmake b/cmake/Modules/FindCythonize.cmake index 2a4cc753e8..97f0304279 100644 --- a/cmake/Modules/FindCythonize.cmake +++ b/cmake/Modules/FindCythonize.cmake @@ -22,7 +22,7 @@ endif() if(Python_EXECUTABLE) get_filename_component(_python_path ${Python_EXECUTABLE} PATH) find_program(Cythonize_EXECUTABLE - NAMES cythonize3 cythonize cythonize.bat + NAMES cythonize-${Python_VERSION_MAJOR}.${Python_VERSION_MINOR} cythonize3 cythonize cythonize.bat HINTS ${_python_path}) endif() diff --git a/cmake/Modules/LAMMPSUtils.cmake b/cmake/Modules/LAMMPSUtils.cmake index 9f624fc007..561f2168e2 100644 --- a/cmake/Modules/LAMMPSUtils.cmake +++ b/cmake/Modules/LAMMPSUtils.cmake @@ -24,6 +24,21 @@ function(validate_option name values) endif() 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}) @@ -110,14 +125,16 @@ function(FetchPotentials pkgfolder potfolder) math(EXPR plusone "${blank}+1") string(SUBSTRING ${line} 0 ${blank} pot) 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) endif() if(NOT sum STREQUAL oldsum) - message(STATUS "Checking external potential ${pot} from ${LAMMPS_POTENTIALS_URL}") - file(DOWNLOAD "${LAMMPS_POTENTIALS_URL}/${pot}.${sum}" "${CMAKE_BINARY_DIR}/${pot}" + message(STATUS "Downloading external potential ${pot} from ${LAMMPS_POTENTIALS_URL}") + 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) - 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() endforeach() endif() diff --git a/cmake/Modules/Packages/GPU.cmake b/cmake/Modules/Packages/GPU.cmake index 75569aa55d..243b5111de 100644 --- a/cmake/Modules/Packages/GPU.cmake +++ b/cmake/Modules/Packages/GPU.cmake @@ -233,7 +233,8 @@ elseif(GPU_API STREQUAL "OPENCL") elseif(GPU_API STREQUAL "HIP") if(NOT DEFINED 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() set(HIP_PATH $ENV{HIP_PATH} CACHE PATH "Path to HIP installation") endif() @@ -261,6 +262,8 @@ elseif(GPU_API STREQUAL "HIP") if(HIP_PLATFORM STREQUAL "hcc" OR HIP_PLATFORM STREQUAL "amd") 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") find_package(CUDA REQUIRED) 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} DEPENDS ${CU_FILE} 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} 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 diff --git a/cmake/Modules/Packages/KOKKOS.cmake b/cmake/Modules/Packages/KOKKOS.cmake index 7f23a6f777..c3852abf7c 100644 --- a/cmake/Modules/Packages/KOKKOS.cmake +++ b/cmake/Modules/Packages/KOKKOS.cmake @@ -15,8 +15,9 @@ if(Kokkos_ENABLE_OPENMP) if(NOT BUILD_OMP) message(FATAL_ERROR "Must enable BUILD_OMP with Kokkos_ENABLE_OPENMP") else() - if(LAMMPS_OMP_COMPAT_LEVEL LESS 4) - message(FATAL_ERROR "Compiler must support OpenMP 4.0 or later with Kokkos_ENABLE_OPENMP") + # NVHPC does not seem to provide a detectable OpenMP version, but is far beyond version 3.1 + 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() @@ -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_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}") include(ExternalProject) - set(KOKKOS_URL "https://github.com/kokkos/kokkos/archive/3.6.01.tar.gz" CACHE STRING "URL for KOKKOS tarball") - set(KOKKOS_MD5 "0ec97fc0c356dd65bd2487defe81a7bf" CACHE STRING "MD5 checksum of 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 "84991eca9f066383abe119a5bc7a11c4" CACHE STRING "MD5 checksum of KOKKOS tarball") mark_as_advanced(KOKKOS_URL) mark_as_advanced(KOKKOS_MD5) ExternalProject_Add(kokkos_build @@ -72,7 +73,7 @@ if(DOWNLOAD_KOKKOS) add_dependencies(LAMMPS::KOKKOSCORE kokkos_build) add_dependencies(LAMMPS::KOKKOSCONTAINERS kokkos_build) elseif(EXTERNAL_KOKKOS) - find_package(Kokkos 3.6.01 REQUIRED CONFIG) + find_package(Kokkos 3.7.00 REQUIRED CONFIG) target_link_libraries(lammps PRIVATE Kokkos::kokkos) target_link_libraries(lmp PRIVATE Kokkos::kokkos) else() @@ -138,6 +139,12 @@ if(PKG_KSPACE) endif() endif() +if(PKG_ML-IAP) + list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/mliap_data_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/mliap_descriptor_so3_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/mliap_model_linear_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/mliap_so3_kokkos.cpp) +endif() if(PKG_PHONON) list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/dynamical_matrix_kokkos.cpp) diff --git a/cmake/Modules/Packages/LATTE.cmake b/cmake/Modules/Packages/LATTE.cmake index a96e850f7e..d7793fa257 100644 --- a/cmake/Modules/Packages/LATTE.cmake +++ b/cmake/Modules/Packages/LATTE.cmake @@ -23,8 +23,9 @@ if(DOWNLOAD_LATTE) # CMake cannot pass BLAS or LAPACK library variable to external project if they are a list list(LENGTH BLAS_LIBRARIES} NUM_BLAS) list(LENGTH LAPACK_LIBRARIES NUM_LAPACK) - if((NUM_BLAS GREATER 1) OR (NUM_LAPACK GREATER 1)) - message(FATAL_ERROR "Cannot compile downloaded LATTE library due to a technical limitation") + 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. " + "Try to configure LAMMPS with '-D USE_INTERNAL_LINALG=on' added as a workaround.") endif() include(ExternalProject) diff --git a/cmake/Modules/Packages/MDI.cmake b/cmake/Modules/Packages/MDI.cmake index 1a14d5273a..c1e25347af 100644 --- a/cmake/Modules/Packages/MDI.cmake +++ b/cmake/Modules/Packages/MDI.cmake @@ -8,8 +8,8 @@ option(DOWNLOAD_MDI "Download and compile the MDI library instead of using an al if(DOWNLOAD_MDI) message(STATUS "MDI download requested - we will build our own") - set(MDI_URL "https://github.com/MolSSI-MDI/MDI_Library/archive/v1.4.1.tar.gz" CACHE STRING "URL for MDI tarball") - set(MDI_MD5 "f9505fccd4c79301a619f6452dad4ad9" CACHE STRING "MD5 checksum 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 "7a222353ae8e03961d5365e6cd48baee" CACHE STRING "MD5 checksum for MDI tarball") mark_as_advanced(MDI_URL) mark_as_advanced(MDI_MD5) enable_language(C) @@ -26,8 +26,21 @@ if(DOWNLOAD_MDI) # detect if we have python development support and thus can enable python plugins set(MDI_USE_PYTHON_PLUGINS OFF) 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 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) endif() else() @@ -36,6 +49,14 @@ if(DOWNLOAD_MDI) set(MDI_USE_PYTHON_PLUGINS ON) 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 # always build static library with -fpic @@ -44,8 +65,9 @@ if(DOWNLOAD_MDI) ExternalProject_Add(mdi_build URL ${MDI_URL} URL_MD5 ${MDI_MD5} + PREFIX ${CMAKE_CURRENT_BINARY_DIR}/mdi_build_ext CMAKE_ARGS - -DCMAKE_INSTALL_PREFIX= + -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/mdi_build_ext -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} @@ -57,23 +79,23 @@ if(DOWNLOAD_MDI) -Dplugins=ON -Dpython_plugins=${MDI_USE_PYTHON_PLUGINS} UPDATE_COMMAND "" - INSTALL_COMMAND "" - BUILD_BYPRODUCTS "/MDI_Library/libmdi.a" + INSTALL_COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/mdi_build_ext/src/mdi_build-build --target install + 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? - ExternalProject_get_property(mdi_build BINARY_DIR) - set(MDI_BINARY_DIR "${BINARY_DIR}/MDI_Library") + ExternalProject_get_property(mdi_build PREFIX) # 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 add_library(LAMMPS::MDI UNKNOWN IMPORTED) add_dependencies(LAMMPS::MDI mdi_build) set_target_properties(LAMMPS::MDI PROPERTIES - IMPORTED_LOCATION "${MDI_BINARY_DIR}/libmdi.a" - INTERFACE_INCLUDE_DIRECTORIES ${MDI_BINARY_DIR} - ) + IMPORTED_LOCATION "${PREFIX}/${CMAKE_INSTALL_LIBDIR}/mdi/${CMAKE_STATIC_LIBRARY_PREFIX}mdi${CMAKE_STATIC_LIBRARY_SUFFIX}" + INTERFACE_INCLUDE_DIRECTORIES ${PREFIX}/include/mdi + ) set(MDI_DEP_LIBS "") # if compiling with python plugins we need diff --git a/cmake/Modules/Packages/MISC.cmake b/cmake/Modules/Packages/MISC.cmake new file mode 100644 index 0000000000..38207835a0 --- /dev/null +++ b/cmake/Modules/Packages/MISC.cmake @@ -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() diff --git a/cmake/Modules/Packages/ML-IAP.cmake b/cmake/Modules/Packages/ML-IAP.cmake index 63f91ba8d3..e2685c78dd 100644 --- a/cmake/Modules/Packages/ML-IAP.cmake +++ b/cmake/Modules/Packages/ML-IAP.cmake @@ -2,7 +2,13 @@ set(MLIAP_ENABLE_PYTHON_DEFAULT OFF) if(PKG_PYTHON) 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) endif() endif() @@ -11,6 +17,9 @@ option(MLIAP_ENABLE_PYTHON "Build ML-IAP package with Python support" ${MLIAP_EN if(MLIAP_ENABLE_PYTHON) find_package(Cythonize REQUIRED) + if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.14) + find_package(Python COMPONENTS NumPy REQUIRED) + endif() if(NOT PKG_PYTHON) message(FATAL_ERROR "Must enable PYTHON package for including Python support in ML-IAP") endif() @@ -25,16 +34,18 @@ if(MLIAP_ENABLE_PYTHON) endif() set(MLIAP_BINARY_DIR ${CMAKE_BINARY_DIR}/cython) - set(MLIAP_CYTHON_SRC ${LAMMPS_SOURCE_DIR}/ML-IAP/mliap_model_python_couple.pyx) - get_filename_component(MLIAP_CYTHON_BASE ${MLIAP_CYTHON_SRC} NAME_WE) + file(GLOB MLIAP_CYTHON_SRC ${LAMMPS_SOURCE_DIR}/ML-IAP/*.pyx) file(MAKE_DIRECTORY ${MLIAP_BINARY_DIR}) - add_custom_command(OUTPUT ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.cpp ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.h - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${MLIAP_CYTHON_SRC} ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.pyx - COMMAND ${Cythonize_EXECUTABLE} -3 ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.pyx - WORKING_DIRECTORY ${MLIAP_BINARY_DIR} - MAIN_DEPENDENCY ${MLIAP_CYTHON_SRC} - COMMENT "Generating C++ sources with cythonize...") + foreach(MLIAP_CYTHON_FILE ${MLIAP_CYTHON_SRC}) + get_filename_component(MLIAP_CYTHON_BASE ${MLIAP_CYTHON_FILE} NAME_WE) + add_custom_command(OUTPUT ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.cpp ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.h + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${MLIAP_CYTHON_FILE} ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.pyx + COMMAND ${Cythonize_EXECUTABLE} -3 ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.pyx + 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_sources(lammps PRIVATE ${MLIAP_BINARY_DIR}/${MLIAP_CYTHON_BASE}.cpp) target_include_directories(lammps PRIVATE ${MLIAP_BINARY_DIR}) endif() diff --git a/cmake/Modules/Packages/ML-PACE.cmake b/cmake/Modules/Packages/ML-PACE.cmake index c553809ff1..0159f36c34 100644 --- a/cmake/Modules/Packages/ML-PACE.cmake +++ b/cmake/Modules/Packages/ML-PACE.cmake @@ -1,6 +1,6 @@ -set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2021.10.25.fix2.tar.gz" CACHE STRING "URL for PACE evaluator library sources") +set(PACELIB_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 "32394d799bc282bb57696c78c456e64f" 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_MD5) @@ -15,23 +15,9 @@ execute_process( ) get_newest_file(${CMAKE_BINARY_DIR}/lammps-user-pace-* lib-pace) -# enforce building libyaml-cpp as static library and turn off optional features -set(YAML_BUILD_SHARED_LIBS OFF) -set(YAML_CPP_BUILD_CONTRIB OFF) -set(YAML_CPP_BUILD_TOOLS OFF) -add_subdirectory(${lib-pace}/yaml-cpp build-yaml-cpp) -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}) +add_subdirectory(${lib-pace} build-pace) 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}) - -target_link_libraries(pace PRIVATE yaml-cpp-pace) if(CMAKE_PROJECT_NAME STREQUAL "lammps") target_link_libraries(lammps PRIVATE pace) endif() diff --git a/cmake/Modules/Packages/ML-QUIP.cmake b/cmake/Modules/Packages/ML-QUIP.cmake index 56221accab..10e0f38b78 100644 --- a/cmake/Modules/Packages/ML-QUIP.cmake +++ b/cmake/Modules/Packages/ML-QUIP.cmake @@ -58,12 +58,12 @@ if(DOWNLOAD_QUIP) BUILD_COMMAND env QUIP_ARCH=lammps make libquip INSTALL_COMMAND "" BUILD_IN_SOURCE YES - BUILD_BYPRODUCTS /build/lammps/libquip.a + BUILD_BYPRODUCTS /build/lammps/${CMAKE_STATIC_LIBRARY_PREFIX}quip${CMAKE_STATIC_LIBRARY_SUFFIX} ) ExternalProject_get_property(quip_build SOURCE_DIR) add_library(LAMMPS::QUIP UNKNOWN IMPORTED) set_target_properties(LAMMPS::QUIP PROPERTIES - IMPORTED_LOCATION "${SOURCE_DIR}/build/lammps/libquip.a" + IMPORTED_LOCATION "${SOURCE_DIR}/build/lammps/${CMAKE_STATIC_LIBRARY_PREFIX}quip${CMAKE_STATIC_LIBRARY_SUFFIX}" INTERFACE_LINK_LIBRARIES "${LAPACK_LIBRARIES}") target_link_libraries(lammps PRIVATE LAMMPS::QUIP) add_dependencies(LAMMPS::QUIP quip_build) diff --git a/cmake/Modules/Packages/PLUMED.cmake b/cmake/Modules/Packages/PLUMED.cmake index 1b660a2cc8..e0e4ff0dde 100644 --- a/cmake/Modules/Packages/PLUMED.cmake +++ b/cmake/Modules/Packages/PLUMED.cmake @@ -47,15 +47,15 @@ if(DOWNLOAD_PLUMED) endif() message(STATUS "PLUMED download requested - we will build our own") if(PLUMED_MODE STREQUAL "STATIC") - set(PLUMED_BUILD_BYPRODUCTS "/lib/libplumed.a") + set(PLUMED_BUILD_BYPRODUCTS "/lib/${CMAKE_STATIC_LIBRARY_PREFIX}plumed${CMAKE_STATIC_LIBRARY_SUFFIX}") elseif(PLUMED_MODE STREQUAL "SHARED") - set(PLUMED_BUILD_BYPRODUCTS "/lib/libplumed${CMAKE_SHARED_LIBRARY_SUFFIX};/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}") + set(PLUMED_BUILD_BYPRODUCTS "/lib/${CMAKE_SHARED_LIBRARY_PREFIX}plumed${CMAKE_SHARED_LIBRARY_SUFFIX};/lib/${CMAKE_SHARED_LIBRARY_PREFIX}plumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}") elseif(PLUMED_MODE STREQUAL "RUNTIME") - set(PLUMED_BUILD_BYPRODUCTS "/lib/libplumedWrapper.a") + set(PLUMED_BUILD_BYPRODUCTS "/lib/${CMAKE_STATIC_LIBRARY_PREFIX}plumedWrapper${CMAKE_STATIC_LIBRARY_PREFIX}") 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_MD5 "858e0b6aed173748fc85b6bc8a9dcb3e" CACHE STRING "MD5 checksum of 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 "6bfe72ebdae63dc38a9ca27d9b0e08f8" CACHE STRING "MD5 checksum of PLUMED tarball") mark_as_advanced(PLUMED_URL) mark_as_advanced(PLUMED_MD5) @@ -78,12 +78,12 @@ if(DOWNLOAD_PLUMED) add_library(LAMMPS::PLUMED UNKNOWN IMPORTED) add_dependencies(LAMMPS::PLUMED plumed_build) 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") - 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") - 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 IMPORTED_LOCATION ${INSTALL_DIR}/lib/libplumedWrapper.a INTERFACE_LINK_LIBRARIES "${CMAKE_DL_LIBS}") + 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/${CMAKE_STATIC_LIBRARY_PREFIX}plumedWrapper${CMAKE_STATIC_LIBRARY_SUFFIX} INTERFACE_LINK_LIBRARIES "${CMAKE_DL_LIBS}") endif() set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) file(MAKE_DIRECTORY ${INSTALL_DIR}/include) @@ -96,7 +96,7 @@ else() elseif(PLUMED_MODE STREQUAL "SHARED") include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.shared) 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) endif() set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_LINK_LIBRARIES "${PLUMED_LOAD}") diff --git a/cmake/Modules/Packages/PYTHON.cmake b/cmake/Modules/Packages/PYTHON.cmake index c94db88073..4a2925fe31 100644 --- a/cmake/Modules/Packages/PYTHON.cmake +++ b/cmake/Modules/Packages/PYTHON.cmake @@ -1,8 +1,28 @@ 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 + 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_link_libraries(lammps PRIVATE ${PYTHON_LIBRARIES}) 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) target_link_libraries(lammps PRIVATE Python::Python) endif() diff --git a/cmake/Modules/Packages/VTK.cmake b/cmake/Modules/Packages/VTK.cmake index 8c4445167a..a0de1e0ff4 100644 --- a/cmake/Modules/Packages/VTK.cmake +++ b/cmake/Modules/Packages/VTK.cmake @@ -1,4 +1,9 @@ find_package(VTK REQUIRED NO_MODULE) -include(${VTK_USE_FILE}) 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() diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index 92e79c02c7..3a7c58eaa3 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -12,7 +12,7 @@ set(ALL_PACKAGES BPM BROWNIAN CG-DNA - CG-SDK + CG-SPICA CLASS2 COLLOID COLVARS diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index 3cc705a126..8229baf652 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -14,7 +14,7 @@ set(ALL_PACKAGES BPM BROWNIAN CG-DNA - CG-SDK + CG-SPICA CLASS2 COLLOID COLVARS diff --git a/cmake/presets/clang.cmake b/cmake/presets/clang.cmake index a0d654ad35..fce451d803 100644 --- a/cmake/presets/clang.cmake +++ b/cmake/presets/clang.cmake @@ -3,6 +3,13 @@ # prefer flang over gfortran, if available find_program(CLANG_FORTRAN NAMES flang gfortran f95) 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_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_RELWITHDEBINFO "-Wall -Wextra -g -O2 -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_RELWITHDEBINFO "-Wall -Wextra -g -O2 -DNDEBUG -std=f2003" CACHE STRING "" FORCE) -set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -DNDEBUG -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 ${FC_STD_VERSION}" 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_RELWITHDEBINFO "-Wall -Wextra -g -O2 -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) 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) diff --git a/cmake/presets/gcc.cmake b/cmake/presets/gcc.cmake index cb626ea019..42cd30d149 100644 --- a/cmake/presets/gcc.cmake +++ b/cmake/presets/gcc.cmake @@ -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_RELEASE "-O3 -DNDEBUG -std=f2003" CACHE STRING "" FORCE) 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) diff --git a/cmake/presets/intel.cmake b/cmake/presets/intel.cmake index 9baf873608..d61ea20d78 100644 --- a/cmake/presets/intel.cmake +++ b/cmake/presets/intel.cmake @@ -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_C_COMPILER "icc" CACHE STRING "" FORCE) @@ -18,11 +18,11 @@ set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE) unset(HAVE_OMP_H_INCLUDE CACHE) 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_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_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) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index 843dd5e4ad..c5d9a7bb89 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -8,7 +8,7 @@ set(WIN_PACKAGES BPM BROWNIAN CG-DNA - CG-SDK + CG-SPICA CLASS2 COLLOID COLVARS diff --git a/cmake/presets/most.cmake b/cmake/presets/most.cmake index b3e0f5ca6c..4b26a51e23 100644 --- a/cmake/presets/most.cmake +++ b/cmake/presets/most.cmake @@ -10,7 +10,7 @@ set(ALL_PACKAGES BPM BROWNIAN CG-DNA - CG-SDK + CG-SPICA CLASS2 COLLOID COLVARS diff --git a/cmake/presets/nvhpc.cmake b/cmake/presets/nvhpc.cmake new file mode 100644 index 0000000000..cfacce17ad --- /dev/null +++ b/cmake/presets/nvhpc.cmake @@ -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) + diff --git a/cmake/presets/oneapi.cmake b/cmake/presets/oneapi.cmake index 403494c409..2aacf1a1f5 100644 --- a/cmake/presets/oneapi.cmake +++ b/cmake/presets/oneapi.cmake @@ -18,11 +18,11 @@ set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE) unset(HAVE_OMP_H_INCLUDE CACHE) 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_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_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) diff --git a/cmake/presets/pedantic.cmake b/cmake/presets/pedantic.cmake index 11c74dbaa4..9bc0d036dd 100644 --- a/cmake/presets/pedantic.cmake +++ b/cmake/presets/pedantic.cmake @@ -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_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) 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) diff --git a/cmake/presets/pgi.cmake b/cmake/presets/pgi.cmake index 2b7fee7efa..4d499a2429 100644 --- a/cmake/presets/pgi.cmake +++ b/cmake/presets/pgi.cmake @@ -7,10 +7,3 @@ set(MPI_CXX "pgc++" CACHE STRING "" FORCE) set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE) 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) diff --git a/cmake/presets/windows.cmake b/cmake/presets/windows.cmake index 5189a90bfe..21be0efefb 100644 --- a/cmake/presets/windows.cmake +++ b/cmake/presets/windows.cmake @@ -6,7 +6,7 @@ set(WIN_PACKAGES BPM BROWNIAN CG-DNA - CG-SDK + CG-SPICA CLASS2 COLLOID COLVARS diff --git a/doc/Makefile b/doc/Makefile index 8841ae4825..3a4a71bd54 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -38,16 +38,14 @@ endif # override settings for PIP commands # 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 -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. # 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\|\)//') -.PHONY: help clean-all clean clean-spelling epub mobi rst html pdf spelling anchor_check style_check char_check xmlgen fasthtml +.PHONY: help clean-all clean clean-spelling epub mobi html pdf spelling anchor_check style_check char_check xmlgen fasthtml # ------------------------------------------ @@ -89,6 +87,8 @@ html: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJAX) @$(MAKE) $(MFLAGS) -C graphviz all @(\ . $(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 ;\ ln -sf Manual.html html/index.html;\ rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\ @@ -114,7 +114,9 @@ fasthtml: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJAX) @mkdir -p fasthtml @(\ . $(VENV)/bin/activate ; env PYTHONWARNINGS= \ - sphinx-build -j 4 -b html -c $(SPHINXCONFIG) -d $(BUILDDIR)/fasthtml/doctrees $(RSTDIR) fasthtml ;\ + 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 @@ -144,6 +146,8 @@ epub: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) @cp src/JPG/*.* epub/JPG @(\ . $(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 ;\ rm -f $(BUILDDIR)/doxygen/xml/run.stamp;\ deactivate ;\ @@ -163,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 @(\ . $(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;\ echo "############################################" ;\ rst_anchor_check src/*.rst ;\ @@ -242,7 +248,6 @@ $(MATHJAX): $(ANCHORCHECK): $(VENV) @( \ . $(VENV)/bin/activate; \ - (cd utils/converters;\ - python setup.py develop);\ + pip $(PIP_OPTIONS) install -e utils/converters;\ deactivate;\ ) diff --git a/doc/lammps.1 b/doc/lammps.1 index 5f1c25867e..a9d1e2ce6e 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,7 +1,7 @@ -.TH LAMMPS "1" "23 June 2022" "2022-6-23" +.TH LAMMPS "1" "3 November 2022" "2022-11-3" .SH NAME .B LAMMPS -\- Molecular Dynamics Simulator. Version 23 June 2022 +\- Molecular Dynamics Simulator. Version 3 November 2022 .SH SYNOPSIS .B lmp @@ -161,7 +161,7 @@ list references for specific cite-able features used during a run. .TP \fB\-pk