diff --git a/.github/workflows/compile-msvc.yml b/.github/workflows/compile-msvc.yml index 216f465568..3ec5fc4cb0 100644 --- a/.github/workflows/compile-msvc.yml +++ b/.github/workflows/compile-msvc.yml @@ -3,9 +3,11 @@ name: "Native Windows Compilation and Unit Tests" on: push: - branches: [ develop ] + branches: + - develop pull_request: - branches: [ $default-branch ] + 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 aba0570f2b..2d29eac83e 100644 --- a/.github/workflows/unittest-macos.yml +++ b/.github/workflows/unittest-macos.yml @@ -3,9 +3,11 @@ name: "Unittest for MacOS" on: push: - branches: [ develop ] + branches: + - develop pull_request: - branches: [ $default-branch ] + branches: + - develop workflow_dispatch: diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index aaa0885072..28c3d6c027 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -376,6 +376,7 @@ 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) diff --git a/cmake/Modules/LAMMPSUtils.cmake b/cmake/Modules/LAMMPSUtils.cmake index 9f624fc007..9b75209e16 100644 --- a/cmake/Modules/LAMMPSUtils.cmake +++ b/cmake/Modules/LAMMPSUtils.cmake @@ -110,14 +110,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/MDI.cmake b/cmake/Modules/Packages/MDI.cmake index d873c8f6d1..8f7c87b684 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.11.tar.gz" CACHE STRING "URL for MDI tarball") + set(MDI_MD5 "3791fe5081405c14aac07d4687f1cc58" CACHE STRING "MD5 checksum for MDI tarball") mark_as_advanced(MDI_URL) mark_as_advanced(MDI_MD5) enable_language(C) diff --git a/cmake/presets/clang.cmake b/cmake/presets/clang.cmake index a0d654ad35..f1964f3e0f 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) diff --git a/doc/src/Commands_all.rst b/doc/src/Commands_all.rst index 5e309c3ed0..f12cfb7336 100644 --- a/doc/src/Commands_all.rst +++ b/doc/src/Commands_all.rst @@ -61,6 +61,7 @@ An alphabetic list of general LAMMPS commands. * :doc:`kspace_modify ` * :doc:`kspace_style ` * :doc:`label