From f68247ad6aed9cfd41b818095e05dfa1dae6f586 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jun 2022 05:10:00 -0400 Subject: [PATCH 01/21] add ML-PACE and PLUGIN packages to be compiled with MinGW cross-compilers --- cmake/presets/mingw-cross.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index 81db71729a..29de394b8e 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -46,8 +46,9 @@ set(WIN_PACKAGES MISC ML-HDNNP ML-IAP - ML-SNAP + ML-PACE ML-RANN + ML-SNAP MOFFF MOLECULE MOLFILE @@ -56,6 +57,7 @@ set(WIN_PACKAGES ORIENT PERI PHONON + PLUGIN POEMS PTM QEQ From f9b5679c0078e2fe3b312dd273d5370249dd7fe7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jun 2022 07:16:19 -0400 Subject: [PATCH 02/21] remove unused function arguments --- src/EXTRA-COMPUTE/compute_stress_cartesian.cpp | 6 +++--- src/EXTRA-COMPUTE/compute_stress_cartesian.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/EXTRA-COMPUTE/compute_stress_cartesian.cpp b/src/EXTRA-COMPUTE/compute_stress_cartesian.cpp index 25c3117b0f..f873c70bae 100644 --- a/src/EXTRA-COMPUTE/compute_stress_cartesian.cpp +++ b/src/EXTRA-COMPUTE/compute_stress_cartesian.cpp @@ -318,7 +318,7 @@ void ComputeStressCartesian::compute_array() // Check if inside cut-off if (rsq >= cutsq[itype][jtype]) continue; pair->single(i, j, itype, jtype, rsq, factor_coul, factor_lj, fpair); - compute_pressure(fpair, xi1, xi2, xj1, xj2, delx, dely, delz); + compute_pressure(fpair, xi1, xi2, delx, dely, delz); } } @@ -356,8 +356,8 @@ void ComputeStressCartesian::compute_array() } } -void ComputeStressCartesian::compute_pressure(double fpair, double xi, double yi, double xj, - double yj, double delx, double dely, double delz) +void ComputeStressCartesian::compute_pressure(double fpair, double xi, double yi, double delx, + double dely, double delz) { int bin1, bin2, next_bin1, next_bin2; double la = 0.0, lb = 0.0, l_sum = 0.0; diff --git a/src/EXTRA-COMPUTE/compute_stress_cartesian.h b/src/EXTRA-COMPUTE/compute_stress_cartesian.h index 63e33a5407..d4505a1e8e 100644 --- a/src/EXTRA-COMPUTE/compute_stress_cartesian.h +++ b/src/EXTRA-COMPUTE/compute_stress_cartesian.h @@ -41,7 +41,7 @@ class ComputeStressCartesian : public Compute { double *dens, *pkxx, *pkyy, *pkzz, *pcxx, *pcyy, *pczz; double *tdens, *tpkxx, *tpkyy, *tpkzz, *tpcxx, *tpcyy, *tpczz; class NeighList *list; - void compute_pressure(double, double, double, double, double, double, double, double); + void compute_pressure(double, double, double, double, double, double); }; } // namespace LAMMPS_NS From 7c4d77f7765eec4d989900357c729646891a0f38 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jun 2022 07:36:25 -0400 Subject: [PATCH 03/21] tweak epsilon for portability --- unittest/force-styles/tests/manybody-pair-pace_product.yaml | 2 +- unittest/force-styles/tests/manybody-pair-pace_recursive.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unittest/force-styles/tests/manybody-pair-pace_product.yaml b/unittest/force-styles/tests/manybody-pair-pace_product.yaml index 9aac9ddcae..1e82029777 100644 --- a/unittest/force-styles/tests/manybody-pair-pace_product.yaml +++ b/unittest/force-styles/tests/manybody-pair-pace_product.yaml @@ -1,7 +1,7 @@ --- lammps_version: 17 Feb 2022 date_generated: Fri Mar 18 22:17:48 2022 -epsilon: 5e-13 +epsilon: 1e-12 skip_tests: prerequisites: ! | pair pace diff --git a/unittest/force-styles/tests/manybody-pair-pace_recursive.yaml b/unittest/force-styles/tests/manybody-pair-pace_recursive.yaml index eef7509606..f20440c85d 100644 --- a/unittest/force-styles/tests/manybody-pair-pace_recursive.yaml +++ b/unittest/force-styles/tests/manybody-pair-pace_recursive.yaml @@ -1,7 +1,7 @@ --- lammps_version: 10 Mar 2021 date_generated: Wed Apr 7 19:30:07 2021 -epsilon: 5e-13 +epsilon: 1e-12 prerequisites: ! | pair pace pre_commands: ! | From 587438eb30ecc99f3c9877cecdd1bde3cbfceb9a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jun 2022 09:14:34 -0400 Subject: [PATCH 04/21] fix typo in read_data add merge example --- doc/src/read_data.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/read_data.rst b/doc/src/read_data.rst index 68e1efc496..b10e758444 100644 --- a/doc/src/read_data.rst +++ b/doc/src/read_data.rst @@ -56,7 +56,7 @@ Examples read_data ../run7/data.polymer.gz read_data data.protein fix mycmap crossterm CMAP read_data data.water add append offset 3 1 1 1 1 shift 0.0 0.0 50.0 - read_data data.water add merge 1 group solvent + read_data data.water add merge group solvent Description """"""""""" From 25c74652e36e594dfd827bc41360f7a30f69fe16 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jun 2022 04:25:13 -0400 Subject: [PATCH 05/21] remove bogus tags --- unittest/force-styles/tests/atomic-pair-sw_angle_table.yaml | 1 - unittest/force-styles/tests/atomic-pair-threebody_table.yaml | 1 - 2 files changed, 2 deletions(-) diff --git a/unittest/force-styles/tests/atomic-pair-sw_angle_table.yaml b/unittest/force-styles/tests/atomic-pair-sw_angle_table.yaml index b8eae7848b..7229a3cd26 100644 --- a/unittest/force-styles/tests/atomic-pair-sw_angle_table.yaml +++ b/unittest/force-styles/tests/atomic-pair-sw_angle_table.yaml @@ -1,6 +1,5 @@ --- lammps_version: 4 May 2022 -tags: generated date_generated: Wed Jun 1 15:17:22 2022 epsilon: 1e-12 skip_tests: single diff --git a/unittest/force-styles/tests/atomic-pair-threebody_table.yaml b/unittest/force-styles/tests/atomic-pair-threebody_table.yaml index 605f18a9a6..bb3c8c1c1b 100644 --- a/unittest/force-styles/tests/atomic-pair-threebody_table.yaml +++ b/unittest/force-styles/tests/atomic-pair-threebody_table.yaml @@ -1,6 +1,5 @@ --- lammps_version: 4 May 2022 -tags: generated date_generated: Wed Jun 1 15:28:13 2022 epsilon: 1e-05 skip_tests: single From fa9ad10bc1c32beed713e3b618c1b91e544fdd38 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jun 2022 05:00:12 -0400 Subject: [PATCH 06/21] add missing line to read_data docs about atom style dielectric --- doc/src/read_data.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/src/read_data.rst b/doc/src/read_data.rst index b10e758444..853d86785e 100644 --- a/doc/src/read_data.rst +++ b/doc/src/read_data.rst @@ -622,6 +622,8 @@ of analysis. - atom-ID molecule-ID atom-type x y z * - charge - atom-ID atom-type q x y z + * - dielectric + - atom-ID atom-type q x y z normx normy normz area ed em epsilon curvature * - dipole - atom-ID atom-type q x y z mux muy muz * - dpd From 0dc486c90b03d7d372f0b4813085d2847a220b77 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jun 2022 05:00:28 -0400 Subject: [PATCH 07/21] fix bug introduced during stringification --- src/DIELECTRIC/atom_vec_dielectric.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/DIELECTRIC/atom_vec_dielectric.cpp b/src/DIELECTRIC/atom_vec_dielectric.cpp index b15b233991..67bb9f7dc3 100644 --- a/src/DIELECTRIC/atom_vec_dielectric.cpp +++ b/src/DIELECTRIC/atom_vec_dielectric.cpp @@ -78,9 +78,9 @@ AtomVecDielectric::AtomVecDielectric(LAMMPS *_lmp) : AtomVec(_lmp) "mu", "area", "ed", "em", "epsilon", "curvature", "q_unscaled"}; fields_create = {"q", "molecule", "num_bond", "num_angle", "num_dihedral", "num_improper", "nspecial", "mu", "area", "ed", "em", "epsilon", "curvature", "q_unscaled"}; - fields_data_atom = { "id", "molecule", "type", "q", "x", "mu3", "area", "ed", "em", "epsilon", + fields_data_atom = {"id", "molecule", "type", "q", "x", "mu3", "area", "ed", "em", "epsilon", "curvature"}; - fields_data_vel = {"id v"}; + fields_data_vel = {"id", "v"}; // clang-format on setup_fields(); From 3beb071d382bd3d76ad48ebfd37f2fb13c0a92f5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jun 2022 05:15:14 -0400 Subject: [PATCH 08/21] make plugin compilation settings with MSVC consistent and more compile specific --- cmake/CMakeLists.txt | 12 +++++++----- examples/kim/plugin/CMakeLists.txt | 11 ++++++++--- examples/plugins/CMakeLists.txt | 11 ++++++++--- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2566497c0e..6af33cd5b3 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -135,11 +135,13 @@ 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) - add_compile_options(/Zc:__cplusplus) - add_compile_options(/wd4244) - add_compile_options(/wd4267) - if(LAMMPS_EXCEPTIONS) - add_compile_options(/EHsc) + 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() diff --git a/examples/kim/plugin/CMakeLists.txt b/examples/kim/plugin/CMakeLists.txt index f4cb5f598d..851f4db607 100644 --- a/examples/kim/plugin/CMakeLists.txt +++ b/examples/kim/plugin/CMakeLists.txt @@ -28,9 +28,14 @@ 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) - add_compile_options(/Zc:__cplusplus) - add_compile_options(/wd4244) - add_compile_options(/wd4267) + 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() diff --git a/examples/plugins/CMakeLists.txt b/examples/plugins/CMakeLists.txt index 8bef055ad3..688835de56 100644 --- a/examples/plugins/CMakeLists.txt +++ b/examples/plugins/CMakeLists.txt @@ -32,9 +32,14 @@ else() # 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) - add_compile_options(/Zc:__cplusplus) - add_compile_options(/wd4244) - add_compile_options(/wd4267) + 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() endif() From a232bd330223d5408836010ea6b5e7d50c0df2ac Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jun 2022 10:59:25 -0400 Subject: [PATCH 09/21] refactor LAMMPS plugin building to share more code and to add a demo for ML-PACE --- cmake/Modules/LAMMPSInterfacePlugin.cmake | 197 ++++++++++++++++++ cmake/Modules/Packages/ML-PACE.cmake | 5 +- examples/PACKAGES/pace/plugin/CMakeLists.txt | 36 ++++ .../pace/plugin/LAMMPSInterfacePlugin.cmake | 1 + examples/PACKAGES/pace/plugin/ML-PACE.cmake | 1 + .../pace/plugin/lammps-text-logo-wide.bmp | Bin 0 -> 25818 bytes examples/PACKAGES/pace/plugin/lammps.ico | Bin 0 -> 209266 bytes examples/PACKAGES/pace/plugin/paceplugin.cpp | 28 +++ examples/PACKAGES/pace/plugin/paceplugin.nsis | 157 ++++++++++++++ examples/kim/plugin/CMakeLists.txt | 46 +--- examples/kim/plugin/LAMMPSInterfaceCXX.cmake | 88 -------- .../kim/plugin/LAMMPSInterfacePlugin.cmake | 1 + 12 files changed, 427 insertions(+), 133 deletions(-) create mode 100644 cmake/Modules/LAMMPSInterfacePlugin.cmake create mode 100644 examples/PACKAGES/pace/plugin/CMakeLists.txt create mode 120000 examples/PACKAGES/pace/plugin/LAMMPSInterfacePlugin.cmake create mode 120000 examples/PACKAGES/pace/plugin/ML-PACE.cmake create mode 100644 examples/PACKAGES/pace/plugin/lammps-text-logo-wide.bmp create mode 100644 examples/PACKAGES/pace/plugin/lammps.ico create mode 100644 examples/PACKAGES/pace/plugin/paceplugin.cpp create mode 100644 examples/PACKAGES/pace/plugin/paceplugin.nsis delete mode 100644 examples/kim/plugin/LAMMPSInterfaceCXX.cmake create mode 120000 examples/kim/plugin/LAMMPSInterfacePlugin.cmake diff --git a/cmake/Modules/LAMMPSInterfacePlugin.cmake b/cmake/Modules/LAMMPSInterfacePlugin.cmake new file mode 100644 index 0000000000..ec7a739785 --- /dev/null +++ b/cmake/Modules/LAMMPSInterfacePlugin.cmake @@ -0,0 +1,197 @@ +# 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() + +# 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 "") + foreach(_dir ${_dirs}) + file(TIMESTAMP ${_dir} _newtime) + if(_newtime IS_NEWER_THAN _besttime) + set(_bestfile ${_dir}) + set(_besttime ${_newtime}) + endif() + endforeach() + if(_bestfile STREQUAL "") + message(FATAL_ERROR "Could not find valid path at: ${path}") + endif() + set(${variable} ${_bestfile} 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) + 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 /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 /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 $) + 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}) diff --git a/cmake/Modules/Packages/ML-PACE.cmake b/cmake/Modules/Packages/ML-PACE.cmake index c647c8873a..c553809ff1 100644 --- a/cmake/Modules/Packages/ML-PACE.cmake +++ b/cmake/Modules/Packages/ML-PACE.cmake @@ -32,5 +32,6 @@ target_include_directories(pace PUBLIC ${PACE_EVALUATOR_INCLUDE_DIR} ${YAML_CPP_ target_link_libraries(pace PRIVATE yaml-cpp-pace) - -target_link_libraries(lammps PRIVATE pace) +if(CMAKE_PROJECT_NAME STREQUAL "lammps") + target_link_libraries(lammps PRIVATE pace) +endif() diff --git a/examples/PACKAGES/pace/plugin/CMakeLists.txt b/examples/PACKAGES/pace/plugin/CMakeLists.txt new file mode 100644 index 0000000000..f4068a03c9 --- /dev/null +++ b/examples/PACKAGES/pace/plugin/CMakeLists.txt @@ -0,0 +1,36 @@ +########################################## +# CMake build system for plugin examples. +# The is meant to be used as a template for plugins that are +# distributed independent from the LAMMPS package. +########################################## + +cmake_minimum_required(VERSION 3.10) + +project(paceplugin VERSION 1.0 LANGUAGES CXX) + +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) +include(CheckIncludeFileCXX) +include(LAMMPSInterfacePlugin) +include(ML-PACE) + +########################## +# building the plugins + +add_library(paceplugin MODULE paceplugin.cpp ${LAMMPS_SOURCE_DIR}/ML-PACE/pair_pace.cpp) +target_link_libraries(paceplugin PRIVATE pace) +target_link_libraries(paceplugin PRIVATE lammps) +target_include_directories(paceplugin PRIVATE ${LAMMPS_SOURCE_DIR}/ML-PACE) +set_target_properties(paceplugin PROPERTIES PREFIX "" SUFFIX ".so") + +# MacOS seems to need this +if(CMAKE_SYSTEM_NAME STREQUAL Darwin) + set_target_properties(paceplugin PROPERTIES LINK_FLAGS "-Wl,-undefined,dynamic_lookup") +elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") +# tell CMake to export all symbols to a .dll on Windows with special case for MinGW cross-compilers + set_target_properties(paceplugin PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + if(CMAKE_CROSSCOMPILING) + set_target_properties(paceplugin PROPERTIES LINK_FLAGS "-Wl,--export-all-symbols") + endif() +else() + set_target_properties(paceplugin PROPERTIES LINK_FLAGS "-rdynamic") +endif() diff --git a/examples/PACKAGES/pace/plugin/LAMMPSInterfacePlugin.cmake b/examples/PACKAGES/pace/plugin/LAMMPSInterfacePlugin.cmake new file mode 120000 index 0000000000..2ac6d20a54 --- /dev/null +++ b/examples/PACKAGES/pace/plugin/LAMMPSInterfacePlugin.cmake @@ -0,0 +1 @@ +../../../../cmake/Modules/LAMMPSInterfacePlugin.cmake \ No newline at end of file diff --git a/examples/PACKAGES/pace/plugin/ML-PACE.cmake b/examples/PACKAGES/pace/plugin/ML-PACE.cmake new file mode 120000 index 0000000000..3990c0d334 --- /dev/null +++ b/examples/PACKAGES/pace/plugin/ML-PACE.cmake @@ -0,0 +1 @@ +../../../../cmake/Modules/Packages/ML-PACE.cmake \ No newline at end of file diff --git a/examples/PACKAGES/pace/plugin/lammps-text-logo-wide.bmp b/examples/PACKAGES/pace/plugin/lammps-text-logo-wide.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b9ec4c35f22ef07acea3256fa80f58b8e9b5f5cc GIT binary patch literal 25818 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 cJb# Date: Sat, 4 Jun 2022 11:49:33 -0400 Subject: [PATCH 10/21] provide README files with pointers to the developer info for plugins also add a paragraph with information about the ML-PACE plugin to the plugin developer info docs. --- doc/src/Developer_plugins.rst | 29 ++++++++++++++++----- doc/utils/sphinx-config/false_positives.txt | 3 +++ examples/PACKAGES/pace/plugin/README.txt | 2 ++ examples/kim/plugin/README.txt | 2 ++ 4 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 examples/PACKAGES/pace/plugin/README.txt create mode 100644 examples/kim/plugin/README.txt diff --git a/doc/src/Developer_plugins.rst b/doc/src/Developer_plugins.rst index 9bf52801a7..36fdd010b3 100644 --- a/doc/src/Developer_plugins.rst +++ b/doc/src/Developer_plugins.rst @@ -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 ``examples/plugins`` folder. The CMake script code has some small adjustments to allow building the plugins for running unit tests with -them. Another example that converts the KIM package into a plugin can be -found in the ``examples/kim/plugin`` folder. No changes to the sources -of the KIM package themselves are needed; only the plugin interface and -loader code needs to be added. This example only supports building with -CMake, but is probably a more typical example. To compile you need to -run CMake with -DLAMMPS_SOURCE_DIR=. Other +them. + +Another example that converts the KIM package into a plugin can be found +in the ``examples/kim/plugin`` folder. No changes to the sources of the +KIM package themselves are needed; only the plugin interface and loader +code needs to be added. This example only supports building with CMake, +but is probably a more typical example. To compile you need to run CMake +with -DLAMMPS_SOURCE_DIR=. Other configuration setting are identical to those for compiling LAMMPS. + +A second example for a plugin from a package is in the +``examples/PACKAGES/pace/plugin`` folder that will create a plugin from +the ML-PACE package. In this case the bulk of the code is in a static +external library that is being downloaded and compiled first and then +combined with the pair style wrapper and the plugin loader. This +example also contains a NSIS script that can be used to create an +Installer package for Windows (the mutual licensing terms of the +external library and LAMMPS conflict when distributing binaries, so the +ML-PACE package cannot be linked statically, but the LAMMPS headers +required to build the plugin are also available under a less restrictive +license). This will automatically set the required environment variable +and launching a (compatible) LAMMPS binary will load and register the +plugin and the ML-PACE package can then be used as it was linked into +LAMMPS. diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 836dc4efa8..0912a63352 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -2369,6 +2369,9 @@ Nord norder Nordlund normals +normx +normy +normz Noskov noslip noticable diff --git a/examples/PACKAGES/pace/plugin/README.txt b/examples/PACKAGES/pace/plugin/README.txt new file mode 100644 index 0000000000..85490c3f6c --- /dev/null +++ b/examples/PACKAGES/pace/plugin/README.txt @@ -0,0 +1,2 @@ +This folder contains a loader and support files to build the ML-PACE package as plugin. +For more information please see: https://docs.lammps.org/Developer_plugins.html diff --git a/examples/kim/plugin/README.txt b/examples/kim/plugin/README.txt new file mode 100644 index 0000000000..eecc6cc7b4 --- /dev/null +++ b/examples/kim/plugin/README.txt @@ -0,0 +1,2 @@ +This folder contains a loader and support files to build the KIM package as plugin. +For more information please see: https://docs.lammps.org/Developer_plugins.html From b0d2cc305226a109328e16ab58efc4970a4b991f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jun 2022 19:23:32 -0400 Subject: [PATCH 11/21] we can build a plugin instead --- cmake/presets/mingw-cross.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index 29de394b8e..13cfee9018 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -46,7 +46,6 @@ set(WIN_PACKAGES MISC ML-HDNNP ML-IAP - ML-PACE ML-RANN ML-SNAP MOFFF From b338781f8842b21a3ebc0e363d292b4d3f51089c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 Jun 2022 06:52:15 -0400 Subject: [PATCH 12/21] cosmetic --- src/MC/fix_widom.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MC/fix_widom.cpp b/src/MC/fix_widom.cpp index 0adabe5eae..0a20e7adf3 100644 --- a/src/MC/fix_widom.cpp +++ b/src/MC/fix_widom.cpp @@ -273,7 +273,7 @@ void FixWidom::init() triclinic = domain->triclinic; - ave_widom_chemical_potential = 0; + ave_widom_chemical_potential = 0.0; if (region) volume = region_volume; else volume = domain->xprd * domain->yprd * domain->zprd; From dcbc5256fa9e037ef6469f1f3c039d9aaa6c3385 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 Jun 2022 12:30:27 -0400 Subject: [PATCH 13/21] additional OpenMP suppressions for newer GCC --- tools/valgrind/OpenMP.supp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tools/valgrind/OpenMP.supp b/tools/valgrind/OpenMP.supp index e1870e668c..15531fa8ec 100644 --- a/tools/valgrind/OpenMP.supp +++ b/tools/valgrind/OpenMP.supp @@ -134,3 +134,31 @@ fun:GOMP_parallel obj:* } +{ + OpnMP_open_part1 + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + ... + fun:openaux + ... + fun:dl_open_worker_begin + ... + fun:dl_open_worker + ... + fun:_dl_open +} +{ + OpnMP_open_part2 + Memcheck:Leak + match-leak-kinds: reachable + fun:calloc + ... + fun:openaux + ... + fun:dl_open_worker_begin + ... + fun:dl_open_worker + ... + fun:_dl_open +} From 8f773be2d6c698900ddcd6f063433dd76aaa9ed9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 6 Jun 2022 15:01:25 -0400 Subject: [PATCH 14/21] must open files for xtc dump in binary mode --- src/EXTRA-DUMP/dump_xtc.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/EXTRA-DUMP/dump_xtc.cpp b/src/EXTRA-DUMP/dump_xtc.cpp index 3c5be6b9be..8e0bb4a0d7 100644 --- a/src/EXTRA-DUMP/dump_xtc.cpp +++ b/src/EXTRA-DUMP/dump_xtc.cpp @@ -433,10 +433,10 @@ int xdropen(XDR *xdrs, const char *filename, const char *type) return 0; } if (*type == 'w' || *type == 'W') { - type = (char *) "w+"; + type = (char *) "wb+"; lmode = XDR_ENCODE; } else { - type = (char *) "r"; + type = (char *) "rb"; lmode = XDR_DECODE; } xdrfiles[xdrid] = fopen(filename, type); From d7680dd7852901cf690b3c39472ffa71bb54c824 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 7 Jun 2022 10:10:03 -0600 Subject: [PATCH 15/21] Fix int32 overflow in Kokkos ReaxFF --- src/KOKKOS/pair_reaxff_kokkos.cpp | 2 +- src/KOKKOS/pair_reaxff_kokkos.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/pair_reaxff_kokkos.cpp b/src/KOKKOS/pair_reaxff_kokkos.cpp index 7f2477adba..bb6ee0c1f1 100644 --- a/src/KOKKOS/pair_reaxff_kokkos.cpp +++ b/src/KOKKOS/pair_reaxff_kokkos.cpp @@ -2628,7 +2628,7 @@ int PairReaxFFKokkos::preprocess_angular(int i, int itype, int j_sta template template KOKKOS_INLINE_FUNCTION -int PairReaxFFKokkos::preprocess_torsion(int i, int /*itype*/, int itag, +int PairReaxFFKokkos::preprocess_torsion(int i, int /*itype*/, tagint itag, F_FLOAT xtmp, F_FLOAT ytmp, F_FLOAT ztmp, int j_start, int j_end, int location_torsion) const { // in reaxff_torsion_angles: j = i, k = j, i = k; diff --git a/src/KOKKOS/pair_reaxff_kokkos.h b/src/KOKKOS/pair_reaxff_kokkos.h index 39b323a0fe..836a2de731 100644 --- a/src/KOKKOS/pair_reaxff_kokkos.h +++ b/src/KOKKOS/pair_reaxff_kokkos.h @@ -257,7 +257,7 @@ class PairReaxFFKokkos : public PairReaxFF { // Abstraction for counting and populating torsion intermediated template KOKKOS_INLINE_FUNCTION - int preprocess_torsion(int, int, int, F_FLOAT, F_FLOAT, F_FLOAT, int, int, int) const; + int preprocess_torsion(int, int, tagint, F_FLOAT, F_FLOAT, F_FLOAT, int, int, int) const; template KOKKOS_INLINE_FUNCTION From 42694ba6406245ae0a66ec74c814f445224b997c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 Jun 2022 19:39:36 -0400 Subject: [PATCH 16/21] reduce warnings when compiling with KOKKOS --- src/fmt/core.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/fmt/core.h b/src/fmt/core.h index 8444cd9546..2fafa777ba 100644 --- a/src/fmt/core.h +++ b/src/fmt/core.h @@ -315,7 +315,9 @@ // Enable minimal optimizations for more compact code in debug mode. FMT_GCC_PRAGMA("GCC push_options") -#ifndef __OPTIMIZE__ +// LAMMPS CUSTOMIZATION: suppress warning about pragma with KOKKOS +#if !defined(__OPTIMIZE__) && !defined(LMP_KOKKOS) +// END LAMMPS CUSTOMIZATION FMT_GCC_PRAGMA("GCC optimize(\"Og\")") #endif From 55fdb7f12a4a4b6f3a291f0d34b57ab391722245 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Jun 2022 08:19:54 -0400 Subject: [PATCH 17/21] update GPU container definitions for CUDA 11.7 and singularity -> apptainer --- doc/src/Tools.rst | 17 +++++++++-------- tools/singularity/README.md | 10 ++++++---- tools/singularity/ubuntu18.04_gpu.def | 14 +++++++------- tools/singularity/ubuntu20.04_gpu.def | 12 ++++++------ 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/doc/src/Tools.rst b/doc/src/Tools.rst index ef403daa84..b57c91ffee 100644 --- a/doc/src/Tools.rst +++ b/doc/src/Tools.rst @@ -95,7 +95,7 @@ Miscellaneous tools * :ref:`LAMMPS shell ` * :ref:`LAMMPS magic patterns for file(1) ` * :ref:`Offline build tool ` - * :ref:`singularity ` + * :ref:`singularity/apptainer ` * :ref:`SWIG interface ` * :ref:`vim ` @@ -1007,14 +1007,15 @@ Ivanov, at University of Iceland (ali5 at hi.is). .. _singularity_tool: -singularity tool ----------------------------------------- +singularity/apptainer tool +-------------------------- -The singularity sub-directory contains container definitions files -that can be used to build container images for building and testing -LAMMPS on specific OS variants using the `Singularity `_ -container software. Contributions for additional variants are welcome. -For more details please see the README.md file in that folder. +The singularity sub-directory contains container definitions files that +can be used to build container images for building and testing LAMMPS on +specific OS variants using the `Apptainer `_ or +`Singularity `_ container software. Contributions for +additional variants are welcome. For more details please see the +README.md file in that folder. ---------- diff --git a/tools/singularity/README.md b/tools/singularity/README.md index db7aa9e3b0..4700dac6ec 100644 --- a/tools/singularity/README.md +++ b/tools/singularity/README.md @@ -1,17 +1,19 @@ -# Singularity container definitions for compiling/testing LAMMPS +# Apptainer (aka Singularity) container definitions for compiling/testing LAMMPS The *.def files in this folder can be used to build container images -for [Singularity](https://sylabs.io), suitable for compiling and testing +for [Apptainer](https://apptainer.org) (previously called +[Singularity](https://sylabs.io)), suitable for compiling and testing LAMMPS on a variety of OS variants with support for most standard packages and - for some of them - also building/spellchecking the manual -in all supported formats. This allows to test and debug LAMMPS code on +in all supported formats. This allows to test and debug LAMMPS code on different OS variants without doing a full installation on your development workstation, e.g. when bugs are reported that can only be reproduced on a specific OS or with specific (mostly older) versions of tools, compilers, or libraries. Here is a workflow for testing a compilation of LAMMPS with a locally -built CentOS 7.x singularity container. +built CentOS 7.x Singularity container. For Apptainer replace the +`singularity` command with `apptainer`. ``` cd some/work/directory diff --git a/tools/singularity/ubuntu18.04_gpu.def b/tools/singularity/ubuntu18.04_gpu.def index 6aa37ccf84..fac27dc7f3 100644 --- a/tools/singularity/ubuntu18.04_gpu.def +++ b/tools/singularity/ubuntu18.04_gpu.def @@ -2,11 +2,11 @@ BootStrap: docker From: ubuntu:18.04 %environment - export PATH=/usr/lib/ccache:/usr/local/cuda-11.5/bin:${PATH}:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin/x86_64 - export CUDADIR=/usr/local/cuda-11.5 - export CUDA_PATH=/usr/local/cuda-11.5 - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.5/lib64:/opt/rocm/lib:/opt/rocm-4.5.0/llvm/lib - export LIBRARY_PATH=/usr/local/cuda-11.5/lib64/stubs + export PATH=/usr/lib/ccache:/usr/local/cuda-11.7/bin:${PATH}:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin/x86_64 + export CUDADIR=/usr/local/cuda-11.7 + export CUDA_PATH=/usr/local/cuda-11.7 + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.7/lib64:/opt/rocm/lib:/opt/rocm-4.5.0/llvm/lib + export LIBRARY_PATH=/usr/local/cuda-11.7/lib64/stubs %post export DEBIAN_FRONTEND=noninteractive apt-get update @@ -122,11 +122,11 @@ From: ubuntu:18.04 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 - apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub + apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /" apt-get update - export CUDA_PKG_VERSION=11.5 + export CUDA_PKG_VERSION=11.7 apt-get install -y --no-install-recommends \ cuda-libraries-${CUDA_PKG_VERSION} \ diff --git a/tools/singularity/ubuntu20.04_gpu.def b/tools/singularity/ubuntu20.04_gpu.def index 23bddeb14f..8c40f6c8d6 100644 --- a/tools/singularity/ubuntu20.04_gpu.def +++ b/tools/singularity/ubuntu20.04_gpu.def @@ -2,11 +2,11 @@ BootStrap: docker From: ubuntu:20.04 %environment - export PATH=/usr/lib/ccache:/usr/local/cuda-11.5/bin:${PATH}:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin/x86_64 - export CUDADIR=/usr/local/cuda-11.5 - export CUDA_PATH=/usr/local/cuda-11.5 - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.5/lib64:/opt/rocm/lib:/opt/rocm-4.5.0/llvm/lib - export LIBRARY_PATH=/usr/local/cuda-11.5/lib64/stubs + export PATH=/usr/lib/ccache:/usr/local/cuda-11.7/bin:${PATH}:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin/x86_64 + export CUDADIR=/usr/local/cuda-11.7 + export CUDA_PATH=/usr/local/cuda-11.7 + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.7/lib64:/opt/rocm/lib:/opt/rocm-4.5.0/llvm/lib + export LIBRARY_PATH=/usr/local/cuda-11.7/lib64/stubs %post export DEBIAN_FRONTEND=noninteractive apt-get update @@ -109,7 +109,7 @@ From: ubuntu:20.04 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 - apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub + apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" apt-get update From 7769a8e0de24c9d89191baf532fcc70bf3042495 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Jun 2022 12:18:17 -0400 Subject: [PATCH 18/21] update ROCm to version 5.1.3 consistently --- tools/singularity/ubuntu18.04_amd_rocm.def | 8 ++++---- tools/singularity/ubuntu18.04_gpu.def | 6 +++--- tools/singularity/ubuntu20.04_amd_rocm.def | 8 ++++---- tools/singularity/ubuntu20.04_gpu.def | 8 ++++---- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tools/singularity/ubuntu18.04_amd_rocm.def b/tools/singularity/ubuntu18.04_amd_rocm.def index ceedfd8144..febdf1172e 100644 --- a/tools/singularity/ubuntu18.04_amd_rocm.def +++ b/tools/singularity/ubuntu18.04_amd_rocm.def @@ -3,7 +3,7 @@ From: ubuntu:18.04 %environment export PATH=/usr/lib/ccache:${PATH}:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin/x86_64 - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/rocm/lib:/opt/rocm-5.1.2/llvm/lib + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/rocm/lib:/opt/rocm-5.1.3/llvm/lib %post export DEBIAN_FRONTEND=noninteractive apt-get update @@ -22,10 +22,10 @@ From: ubuntu:18.04 apt install -y cmake ########################################################################### - # ROCm 5.1.2 + # ROCm 5.1.3 ########################################################################### - wget https://repo.radeon.com/amdgpu-install/22.10.2/ubuntu/bionic/amdgpu-install_22.10.2.50102-1_all.deb - apt-get install -y ./amdgpu-install_22.10.2.50102-1_all.deb + wget https://repo.radeon.com/amdgpu-install/22.10.3/ubuntu/bionic/amdgpu-install_22.10.3.50103-1_all.deb + apt-get install -y ./amdgpu-install_22.10.3.50103-1_all.deb apt-get update apt-get install --no-install-recommends -y \ diff --git a/tools/singularity/ubuntu18.04_gpu.def b/tools/singularity/ubuntu18.04_gpu.def index fac27dc7f3..7d639a1e1d 100644 --- a/tools/singularity/ubuntu18.04_gpu.def +++ b/tools/singularity/ubuntu18.04_gpu.def @@ -5,7 +5,7 @@ From: ubuntu:18.04 export PATH=/usr/lib/ccache:/usr/local/cuda-11.7/bin:${PATH}:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin/x86_64 export CUDADIR=/usr/local/cuda-11.7 export CUDA_PATH=/usr/local/cuda-11.7 - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.7/lib64:/opt/rocm/lib:/opt/rocm-4.5.0/llvm/lib + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.7/lib64:/opt/rocm/lib:/opt/rocm-5.1.3/llvm/lib export LIBRARY_PATH=/usr/local/cuda-11.7/lib64/stubs %post export DEBIAN_FRONTEND=noninteractive @@ -27,8 +27,8 @@ From: ubuntu:18.04 ########################################################################### # ROCm 4.5 ########################################################################### - wget https://repo.radeon.com/amdgpu-install/21.40/ubuntu/focal/amdgpu-install-21.40.40500-1_all.deb - apt-get install -y ./amdgpu-install-21.40.40500-1_all.deb + wget https://repo.radeon.com/amdgpu-install/22.10.3/ubuntu/focal/amdgpu-install-22.10.3.50103-1_all.deb + apt-get install -y ./amdgpu-install-22.10.3.50103-1_all.deb apt-get update apt-get install --no-install-recommends -y \ diff --git a/tools/singularity/ubuntu20.04_amd_rocm.def b/tools/singularity/ubuntu20.04_amd_rocm.def index 5e351e49a8..6034014370 100644 --- a/tools/singularity/ubuntu20.04_amd_rocm.def +++ b/tools/singularity/ubuntu20.04_amd_rocm.def @@ -3,7 +3,7 @@ From: ubuntu:20.04 %environment export PATH=/usr/lib/ccache:${PATH}:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin/x86_64 - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/rocm/lib:/opt/rocm-5.1.2/llvm/lib + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/rocm/lib:/opt/rocm-5.1.3/llvm/lib %post export DEBIAN_FRONTEND=noninteractive apt-get update @@ -13,10 +13,10 @@ From: ubuntu:20.04 apt-get install --no-install-recommends -y software-properties-common ########################################################################### - # ROCm 5.1.2 + # ROCm 5.1.3 ########################################################################### - wget https://repo.radeon.com/amdgpu-install/22.10.2/ubuntu/focal/amdgpu-install_22.10.2.50102-1_all.deb - apt-get install -y ./amdgpu-install_22.10.2.50102-1_all.deb + wget https://repo.radeon.com/amdgpu-install/22.10.3/ubuntu/focal/amdgpu-install_22.10.3.50103-1_all.deb + apt-get install -y ./amdgpu-install_22.10.3.50103-1_all.deb apt-get update apt-get install --no-install-recommends -y \ diff --git a/tools/singularity/ubuntu20.04_gpu.def b/tools/singularity/ubuntu20.04_gpu.def index 8c40f6c8d6..1e28ab95fa 100644 --- a/tools/singularity/ubuntu20.04_gpu.def +++ b/tools/singularity/ubuntu20.04_gpu.def @@ -5,7 +5,7 @@ From: ubuntu:20.04 export PATH=/usr/lib/ccache:/usr/local/cuda-11.7/bin:${PATH}:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin/x86_64 export CUDADIR=/usr/local/cuda-11.7 export CUDA_PATH=/usr/local/cuda-11.7 - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.7/lib64:/opt/rocm/lib:/opt/rocm-4.5.0/llvm/lib + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.7/lib64:/opt/rocm/lib:/opt/rocm-5.1.3/llvm/lib export LIBRARY_PATH=/usr/local/cuda-11.7/lib64/stubs %post export DEBIAN_FRONTEND=noninteractive @@ -15,10 +15,10 @@ From: ubuntu:20.04 apt-get install -y --no-install-recommends curl wget libnuma-dev gnupg ca-certificates ########################################################################### - # ROCm 4.5 + # ROCm 5.1.3 ########################################################################### - wget https://repo.radeon.com/amdgpu-install/21.40/ubuntu/focal/amdgpu-install-21.40.40500-1_all.deb - apt-get install -y ./amdgpu-install-21.40.40500-1_all.deb + wget https://repo.radeon.com/amdgpu-install/22.10.3/ubuntu/focal/amdgpu-install-22.10.3.50103-1_all.deb + apt-get install -y ./amdgpu-install-22.10.3.50103-1_all.deb apt-get update apt-get install --no-install-recommends -y \ From b6e0d7612303cde834fde55bd8a145a9fd983767 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Jun 2022 12:47:30 -0400 Subject: [PATCH 19/21] fix some docs formatting issues --- doc/src/pair_e3b.rst | 91 +++++++++++++-------- doc/src/pair_sw_angle_table.rst | 4 +- doc/src/pair_threebody_table.rst | 6 +- doc/utils/sphinx-config/false_positives.txt | 1 + 4 files changed, 65 insertions(+), 37 deletions(-) diff --git a/doc/src/pair_e3b.rst b/doc/src/pair_e3b.rst index b75fb8450c..8ae6d10b82 100644 --- a/doc/src/pair_e3b.rst +++ b/doc/src/pair_e3b.rst @@ -50,6 +50,12 @@ Examples pair_style hybrid/overlay e3b 1 lj/cut/tip4p/long 1 2 1 1 0.15 8.5 pair_coeff * * e3b preset 2011 +Used in example input script: + +.. parsed-literal:: + + examples/PACKAGES/e3b/in.e3b-tip4p2005 + Description """"""""""" @@ -68,21 +74,27 @@ The *e3b* style computes an \"explicit three-body\" (E3B) potential for water :r 0 & r>R_f\\ \end{cases} -This potential was developed as a water model that includes the three-body cooperativity of hydrogen bonding explicitly. -To use it in this way, it must be applied in conjunction with a conventional two-body water model, through *pair_style hybrid/overlay*. -The three body interactions are split into three types: A, B, and C. -Type A corresponds to anti-cooperative double hydrogen bond donor interactions. -Type B corresponds to the cooperative interaction of molecules that both donate and accept a hydrogen bond. -Type C corresponds to anti-cooperative double hydrogen bond acceptor interactions. -The three-body interactions are smoothly cutoff by the switching function s(r) between Rs and Rc3. -The two-body interactions are designed to correct for the effective many-body interactions implicitly included in the conventional two-body potential. -The two-body interactions are cut off sharply at Rc2, because K3 is typically significantly smaller than K2. -See :ref:`(Kumar 2008) ` for more details. +This potential was developed as a water model that includes the +three-body cooperativity of hydrogen bonding explicitly. To use it in +this way, it must be applied in conjunction with a conventional two-body +water model, through pair style :doc:`hybrid/overlay `. The +three body interactions are split into three types: A, B, and C. Type A +corresponds to anti-cooperative double hydrogen bond donor interactions. +Type B corresponds to the cooperative interaction of molecules that both +donate and accept a hydrogen bond. Type C corresponds to +anti-cooperative double hydrogen bond acceptor interactions. The +three-body interactions are smoothly cutoff by the switching function +s(r) between Rs and Rc3. The two-body interactions are designed to +correct for the effective many-body interactions implicitly included in +the conventional two-body potential. The two-body interactions are cut +off sharply at Rc2, because K3 is typically significantly smaller than +K2. See :ref:`(Kumar 2008) ` for more details. -Only a single *pair_coeff* command is used with the *e3b* style. -The first two arguments must be \* \*. -The oxygen atom type for the pair style is passed as the only argument to the *pair_style* command, not in the *pair_coeff* command. -The hydrogen atom type is inferred by the ordering of the atoms. +Only a single :doc:`pair_coeff ` command is used with the +*e3b* style and the first two arguments must be \* \*. The oxygen atom +type for the pair style is passed as the only argument to the +*pair_style* command, not in the *pair_coeff* command. The hydrogen +atom type is inferred from the ordering of the atoms. .. note:: @@ -90,26 +102,41 @@ The hydrogen atom type is inferred by the ordering of the atoms. Each water molecule must have consecutive IDs with the oxygen first. This pair style does not test that this criteria is met. -The *pair_coeff* command must have at least one keyword/value pair, as described above. -The *preset* keyword sets the potential parameters to the values used in :ref:`(Tainter 2011) ` or :ref:`(Tainter 2015) `. -To use the water models defined in those references, the *e3b* style should always be used in conjunction with an *lj/cut/tip4p/long* style through *pair_style hybrid/overlay*, as demonstrated in the second example above. -The *preset 2011* option should be used with the :doc:`TIP4P water model `. -The *preset 2015* option should be used with the :doc:`TIP4P/2005 water model `. -If the *preset* keyword is used, no other keyword is needed. -Changes to the preset parameters can be made by specifying the *preset* keyword followed by the specific parameter to change, like *Ea*\ . -Note that the other keywords must come after *preset* in the pair_style command. -The *e3b* style can also be used to implement any three-body potential of the same form by specifying all the keywords except *neigh*\ : *Ea*, *Eb*, *Ec*, *E2*, *K3*, *K2*, *Rc3*, *Rc2*, *Rs*, and *bondL*\ . -The keyword *bondL* specifies the intramolecular OH bond length of the water model being used. -This is needed to include H atoms that are within the cutoff even when the attached oxygen atom is not. +The *pair_coeff* command must have at least one keyword/value pair, as +described above. The *preset* keyword sets the potential parameters to +the values used in :ref:`(Tainter 2011) ` or +:ref:`(Tainter 2015) `. To use the water models defined in +those references, the *e3b* style should always be used in conjunction +with an *lj/cut/tip4p/long* style through *pair_style hybrid/overlay*, +as demonstrated in the second example above. The *preset 2011* option +should be used with the :doc:`TIP4P water model `. The +*preset 2015* option should be used with the :doc:`TIP4P/2005 water +model `. If the *preset* keyword is used, no other keyword +is needed. Changes to the preset parameters can be made by specifying +the *preset* keyword followed by the specific parameter to change, like +*Ea*\ . Note that the other keywords must come after *preset* in the +pair_style command. The *e3b* style can also be used to implement any +three-body potential of the same form by specifying all the keywords +except *neigh*\ : *Ea*, *Eb*, *Ec*, *E2*, *K3*, *K2*, *Rc3*, *Rc2*, +*Rs*, and *bondL*\ . The keyword *bondL* specifies the intramolecular +OH bond length of the water model being used. This is needed to include +H atoms that are within the cutoff even when the attached oxygen atom is +not. -This pair style allocates arrays sized according to the number of pairwise interactions within Rc3. -To do this it needs an estimate for the number of water molecules within Rc3 of an oxygen atom. -This estimate defaults to 10 and can be changed using the *neigh* keyword, which takes an integer as an argument. -If the neigh setting is too small, the simulation will fail with the error "neigh is too small". -If the neigh setting is too large, the pair style will use more memory than necessary. +This pair style allocates arrays sized according to the number of +pairwise interactions within Rc3. To do this it needs an estimate for +the number of water molecules within Rc3 of an oxygen atom. This +estimate defaults to 10 and can be changed using the *neigh* keyword, +which takes an integer as an argument. If the neigh setting is too +small, the simulation will fail with the error "neigh is too small". If +the neigh setting is too large, the pair style will use more memory than +necessary. -This pair style tallies a breakdown of the total E3B potential energy into sub-categories, which can be accessed via the :doc:`compute pair ` command as a vector of values of length 4. -The 4 values correspond to the terms in the first equation above: the E2 term, the Ea term, the Eb term, and the Ec term. +This pair style tallies a breakdown of the total E3B potential energy +into sub-categories, which can be accessed via the :doc:`compute pair +` command as a vector of values of length 4. The 4 values +correspond to the terms in the first equation above: the E2 term, the Ea +term, the Eb term, and the Ec term. See the examples/PACKAGES/e3b directory for a complete example script. diff --git a/doc/src/pair_sw_angle_table.rst b/doc/src/pair_sw_angle_table.rst index 6431917d67..ff88711d7a 100644 --- a/doc/src/pair_sw_angle_table.rst +++ b/doc/src/pair_sw_angle_table.rst @@ -23,9 +23,9 @@ Examples Used in example input script: - .. parsed-literal:: +.. parsed-literal:: - examples/PACKAGES/manybody_table/in.spce_sw + examples/PACKAGES/manybody_table/in.spce_sw Description diff --git a/doc/src/pair_threebody_table.rst b/doc/src/pair_threebody_table.rst index 68661270c9..19c90feccd 100644 --- a/doc/src/pair_threebody_table.rst +++ b/doc/src/pair_threebody_table.rst @@ -27,10 +27,10 @@ Examples Used in example input scripts: - .. parsed-literal:: +.. parsed-literal:: - examples/PACKAGES/manybody_table/in.spce - examples/PACKAGES/manybody_table/in.spce2 + examples/PACKAGES/manybody_table/in.spce + examples/PACKAGES/manybody_table/in.spce2 Description """"""""""" diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 0912a63352..b42cff262a 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -120,6 +120,7 @@ Antonelli api Apoorva Appl +apptainer Apu arallel arccos From 5fca9f4d1fb0bbfb44c8d72af43b247fed980f73 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Jun 2022 17:04:26 -0400 Subject: [PATCH 20/21] update mathjax version with bugfix release --- doc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Makefile b/doc/Makefile index 07b201b07e..8841ae4825 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -13,7 +13,7 @@ VENV = $(BUILDDIR)/docenv ANCHORCHECK = $(VENV)/bin/rst_anchor_check SPHINXCONFIG = $(BUILDDIR)/utils/sphinx-config MATHJAX = $(SPHINXCONFIG)/_static/mathjax -MATHJAXTAG = 3.2.1 +MATHJAXTAG = 3.2.2 PYTHON = $(word 3,$(shell type python3)) DOXYGEN = $(word 3,$(shell type doxygen)) From 68a9db0950cb5d03219b0cf9e2605210d325d2de Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Jun 2022 17:07:08 -0400 Subject: [PATCH 21/21] fix typos --- tools/singularity/ubuntu18.04_gpu.def | 4 ++-- tools/singularity/ubuntu20.04_gpu.def | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/singularity/ubuntu18.04_gpu.def b/tools/singularity/ubuntu18.04_gpu.def index 7d639a1e1d..90034285ff 100644 --- a/tools/singularity/ubuntu18.04_gpu.def +++ b/tools/singularity/ubuntu18.04_gpu.def @@ -27,8 +27,8 @@ From: ubuntu:18.04 ########################################################################### # ROCm 4.5 ########################################################################### - wget https://repo.radeon.com/amdgpu-install/22.10.3/ubuntu/focal/amdgpu-install-22.10.3.50103-1_all.deb - apt-get install -y ./amdgpu-install-22.10.3.50103-1_all.deb + wget https://repo.radeon.com/amdgpu-install/22.10.3/ubuntu/focal/amdgpu-install_22.10.3.50103-1_all.deb + apt-get install -y ./amdgpu-install_22.10.3.50103-1_all.deb apt-get update apt-get install --no-install-recommends -y \ diff --git a/tools/singularity/ubuntu20.04_gpu.def b/tools/singularity/ubuntu20.04_gpu.def index 1e28ab95fa..f7bab1ee9d 100644 --- a/tools/singularity/ubuntu20.04_gpu.def +++ b/tools/singularity/ubuntu20.04_gpu.def @@ -17,8 +17,8 @@ From: ubuntu:20.04 ########################################################################### # ROCm 5.1.3 ########################################################################### - wget https://repo.radeon.com/amdgpu-install/22.10.3/ubuntu/focal/amdgpu-install-22.10.3.50103-1_all.deb - apt-get install -y ./amdgpu-install-22.10.3.50103-1_all.deb + wget https://repo.radeon.com/amdgpu-install/22.10.3/ubuntu/focal/amdgpu-install_22.10.3.50103-1_all.deb + apt-get install -y ./amdgpu-install_22.10.3.50103-1_all.deb apt-get update apt-get install --no-install-recommends -y \