diff --git a/examples/COUPLE/simple/CMakeLists.txt b/examples/COUPLE/simple/CMakeLists.txt index d9b877ec76..46eedcf2d4 100644 --- a/examples/COUPLE/simple/CMakeLists.txt +++ b/examples/COUPLE/simple/CMakeLists.txt @@ -38,7 +38,46 @@ if(NOT LAMMPS_SOURCE_DIR) endif() add_executable(simpleCC simple.cpp) -target_link_libraries(simpleCC LAMMPS::lammps) +target_link_libraries(simpleCC PRIVATE LAMMPS::lammps MPI::MPI_CXX) add_executable(simpleC simple.c) -target_link_libraries(simpleC LAMMPS::lammps) +target_link_libraries(simpleC PRIVATE LAMMPS::lammps MPI::MPI_C) + +if(LAMMPS_SOURCE_DIR) + include(CheckGeneratorSupport) + if(NOT CMAKE_GENERATOR_SUPPORT_FORTRAN) + message(STATUS "Skipping Test for the LAMMPS Fortran Module Coupling: no Fortran support in build tool") + return() + endif() + + include(CheckLanguage) + check_language(Fortran) + + if(CMAKE_Fortran_COMPILER AND MPI_Fortran_FOUND AND MPI_Fortran_HAVE_F90_MODULE) + enable_language(Fortran) + + if(NOT CMAKE_Fortran_COMPILER_ID) + message(STATUS "Skipping Tests for the LAMMPS Fortran Module: cannot identify Fortran compiler") + return() + endif() + + # GNU Fortran 4.8.x on RHEL/CentOS 7.x is not sufficient to compile the Fortran module. + # Work around flang being detected as GNU + get_filename_component(_tmp_fc ${CMAKE_Fortran_COMPILER} NAME) + if((CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") AND (CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 6.0) AND NOT (_tmp_fc STREQUAL "flang")) + message(FATAL_ERROR "Need GNU Fortran compiler version 6.x or later for unit testing") + endif() + + get_filename_component(LAMMPS_FORTRAN_MODULE ${LAMMPS_SOURCE_DIR}/../fortran/lammps.f90 ABSOLUTE) + add_executable(simpleF90 ${LAMMPS_FORTRAN_MODULE} simple.f90) + target_link_libraries(simpleF90 PRIVATE MPI::MPI_Fortran LAMMPS::lammps) + if(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") + target_compile_options(simpleF90 PRIVATE -fallow-argument-mismatch) + endif() + + get_filename_component(_tmp_fc ${CMAKE_Fortran_COMPILER} NAME) + if (_tmp_fc STREQUAL "flang") + target_link_libraries(simpleF90 PRIVATE gfortran) + endif() + endif() +endif() diff --git a/examples/COUPLE/simple/simple.f90 b/examples/COUPLE/simple/simple.f90 index 8902104e47..3aafbee01b 100644 --- a/examples/COUPLE/simple/simple.f90 +++ b/examples/COUPLE/simple/simple.f90 @@ -18,8 +18,8 @@ ! See README for compilation instructions PROGRAM f_driver - USE mpi USE liblammps + USE mpi IMPLICIT NONE INTEGER, PARAMETER :: fp=20 @@ -129,7 +129,10 @@ PROGRAM f_driver ! free LAMMPS object - IF (color == 1) CALL lmp%close() + IF (color == 1) THEN + CALL lmp%CLOSE() + CALL mpi_comm_free(comm_lammps,ierr) + END IF ! close down MPI diff --git a/unittest/c-library/CMakeLists.txt b/unittest/c-library/CMakeLists.txt index 59f1462e9b..9ca83d1741 100644 --- a/unittest/c-library/CMakeLists.txt +++ b/unittest/c-library/CMakeLists.txt @@ -87,6 +87,16 @@ if(BUILD_MPI) COMMAND $ 1 ${LAMMPS_DIR}/examples/COUPLE/simple/in.lj) add_test(NAME RunCoupleSimpleCC COMMAND $ 1 ${LAMMPS_DIR}/examples/COUPLE/simple/in.lj) + + find_package(MPI QUIET) + if(CMAKE_Fortran_COMPILER AND MPI_Fortran_FOUND AND MPI_Fortran_HAVE_F90_MODULE) + add_test(NAME RunCoupleSimpleF90 + COMMAND $ 1 ${LAMMPS_DIR}/examples/COUPLE/simple/in.lj) + set_tests_properties(RunCoupleSimpleF90 PROPERTIES + ENVIRONMENT "TSAN_OPTIONS=ignore_noninstrumented_modules=1;HWLOC_HIDE_ERRORS=2" + PASS_REGULAR_EXPRESSION "LAMMPS \\([0-9]+ [A-Za-z]+ 2[0-9][0-9][0-9]( - Update [0-9]+)?\\)") + endif() + set_tests_properties(RunCoupleSimpleC RunCoupleSimpleCC PROPERTIES ENVIRONMENT "TSAN_OPTIONS=ignore_noninstrumented_modules=1;HWLOC_HIDE_ERRORS=2" PASS_REGULAR_EXPRESSION "LAMMPS \\([0-9]+ [A-Za-z]+ 2[0-9][0-9][0-9]( - Update [0-9]+)?\\)")