diff --git a/.clang-tidy b/.clang-tidy index ddebeb83594141d959df897f3f84919e99a2e99f..00ffd56f0a78c48c38c69cbc6ea2577d090e8a69 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -26,6 +26,8 @@ modernize-*, -modernize-redundant-void-arg, -modernize-use-trailing-return-type, -modernize-avoid-c-arrays, +-modernize-concat-nested-namespaces, +-modernize-use-nodiscard, mpi-*, -mpi-type-mismatch, diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 150f2086ef993d2e37c21aacb39c67a6d09e1dfc..2248c4cdd7a79cde8755e5c5a387de93549cc36a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -77,170 +77,6 @@ stages: -intel_18_serial: - extends: .build_template - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:18 - before_script: - - pip3 install lbmpy jinja2 - - cd python - - python3 -m unittest discover pystencils_walberla/ - - python3 -m unittest discover lbmpy_walberla/ - - cd .. - - CC=gcc CXX=g++ pip3 install pycuda - variables: - WALBERLA_BUILD_WITH_CUDA: "ON" - WALBERLA_BUILD_WITH_MPI: "OFF" - WALBERLA_BUILD_WITH_OPENMP: "OFF" - WALBERLA_BUILD_WITH_PARMETIS: "OFF" - WALBERLA_BUILD_WITH_CODEGEN: "ON" - WALBERLA_BUILD_WITH_PYTHON: "ON" - only: - variables: - - $ENABLE_NIGHTLY_BUILDS - - tags: - - cuda - - docker - - intel - -intel_18_mpionly: - extends: .build_template - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:18 - before_script: - - pip3 install lbmpy jinja2 - - cd python - - python3 -m unittest discover pystencils_walberla/ - - python3 -m unittest discover lbmpy_walberla/ - - cd .. - - CC=gcc CXX=g++ pip3 install pycuda - variables: - WALBERLA_BUILD_WITH_CUDA: "ON" - WALBERLA_BUILD_WITH_OPENMP: "OFF" - WALBERLA_BUILD_WITH_CODEGEN: "ON" - WALBERLA_BUILD_WITH_PYTHON: "ON" - only: - variables: - - $ENABLE_NIGHTLY_BUILDS - - tags: - - cuda - - docker - - intel - -intel_18_hybrid: - extends: .build_template - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:18 - before_script: - - pip3 install lbmpy jinja2 - - cd python - - python3 -m unittest discover pystencils_walberla/ - - python3 -m unittest discover lbmpy_walberla/ - - cd .. - - CC=gcc CXX=g++ pip3 install pycuda - variables: - WALBERLA_BUILD_WITH_CUDA: "ON" - WALBERLA_ENABLE_GUI: "ON" - WALBERLA_BUILD_WITH_CODEGEN: "ON" - WALBERLA_BUILD_WITH_PYTHON: "ON" - only: - variables: - - $ENABLE_NIGHTLY_BUILDS - - tags: - - cuda - - docker - - intel - -intel_18_serial_dbg: - extends: .build_template - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:18 - before_script: - - pip3 install lbmpy jinja2 - - cd python - - python3 -m unittest discover pystencils_walberla/ - - python3 -m unittest discover lbmpy_walberla/ - - cd .. - - CC=gcc CXX=g++ pip3 install pycuda - variables: - WALBERLA_BUILD_WITH_CUDA: "ON" - WALBERLA_BUILD_WITH_MPI: "OFF" - WALBERLA_BUILD_WITH_OPENMP: "OFF" - WALBERLA_BUILD_WITH_PARMETIS: "OFF" - CMAKE_BUILD_TYPE: "DebugOptimized" - WALBERLA_BUILD_WITH_CODEGEN: "ON" - WALBERLA_BUILD_WITH_PYTHON: "ON" - only: - variables: - - $ENABLE_NIGHTLY_BUILDS - - tags: - - cuda - - docker - - intel - -intel_18_mpionly_dbg: - extends: .build_template - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:18 - before_script: - - pip3 install lbmpy jinja2 - - cd python - - python3 -m unittest discover pystencils_walberla/ - - python3 -m unittest discover lbmpy_walberla/ - - cd .. - - CC=gcc CXX=g++ pip3 install pycuda - variables: - WALBERLA_BUILD_WITH_CUDA: "ON" - CMAKE_BUILD_TYPE: "DebugOptimized" - WALBERLA_BUILD_WITH_OPENMP: "OFF" - WALBERLA_BUILD_WITH_CODEGEN: "ON" - WALBERLA_BUILD_WITH_PYTHON: "ON" - only: - variables: - - $ENABLE_NIGHTLY_BUILDS - - tags: - - cuda - - docker - - intel - -intel_18_hybrid_dbg: - extends: .build_template - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:18 - before_script: - - pip3 install lbmpy jinja2 - - cd python - - python3 -m unittest discover pystencils_walberla/ - - python3 -m unittest discover lbmpy_walberla/ - - cd .. - - CC=gcc CXX=g++ pip3 install pycuda - variables: - WALBERLA_BUILD_WITH_CUDA: "ON" - CMAKE_BUILD_TYPE: "DebugOptimized" - WALBERLA_BUILD_WITH_CODEGEN: "ON" - WALBERLA_BUILD_WITH_PYTHON: "ON" - tags: - - cuda - - docker - - intel - -intel_18_hybrid_dbg_sp: - extends: .build_template - image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:18 - variables: - WALBERLA_BUILD_WITH_CUDA: "ON" - CMAKE_BUILD_TYPE: "DebugOptimized" - WALBERLA_DOUBLE_ACCURACY: "OFF" - WALBERLA_BUILD_WITH_PARMETIS: "OFF" - WALBERLA_BUILD_WITH_METIS: "OFF" - only: - variables: - - $ENABLE_NIGHTLY_BUILDS - - tags: - - cuda - - docker - - intel - intel_19_serial: extends: .build_template image: i10git.cs.fau.de:5005/walberla/buildenvs/intel:19 @@ -1858,7 +1694,7 @@ cppcheck: image: i10git.cs.fau.de:5005/walberla/buildenvs/cppcheck script: - cppcheck --version - - cppcheck . --max-configs=10 --enable=warning --enable=style --enable=performance --enable=portability -i src/gui/extern -i src/geometry/structured/extern -i sqlite3.c -i StackWalker.cpp -I src/ -I tests/ -I apps/ -D WALBERLA_BUILD_WITH_MPI -D WALBERLA_BUILD_WITH_METIS -D WALBERLA_BUILD_WITH_BOOST_THREAD -D WALBERLA_BUILD_WITH_PYTHON --xml 2> report.xml + - cppcheck . --max-configs=10 --enable=warning --enable=style --enable=performance --enable=portability -i src/gui/extern -i src/geometry/structured/extern -i sqlite3.c -i StackWalker.cpp -I src/ -I tests/ -I apps/ -D WALBERLA_BUILD_WITH_MPI -D WALBERLA_BUILD_WITH_METIS -D WALBERLA_BUILD_WITH_PYTHON --xml 2> report.xml - cppcheck-htmlreport --file=report.xml --report-dir=html_report --source-dir=. artifacts: untracked: true @@ -1919,7 +1755,7 @@ coverage: - cmake --version - mkdir build - cd build - - cmake -LA -DWALBERLA_BUILD_TESTS=ON -DWALBERLA_BUILD_BENCHMARKS=ON -DWALBERLA_BUILD_TUTORIALS=ON -DWALBERLA_BUILD_WITH_MPI=$WALBERLA_BUILD_WITH_MPI -DWALBERLA_BUILD_WITH_OPENMP=$WALBERLA_BUILD_WITH_OPENMP -DWALBERLA_DOUBLE_ACCURACY=$WALBERLA_DOUBLE_ACCURACY -DWARNING_ERROR=ON -G "$CMAKE_GENERATOR" .. + - cmake -LA -DWALBERLA_BUILD_TESTS=ON -DWALBERLA_BUILD_BENCHMARKS=ON -DWALBERLA_BUILD_TUTORIALS=ON -DWALBERLA_BUILD_WITH_MPI=$WALBERLA_BUILD_WITH_MPI -DWALBERLA_BUILD_WITH_OPENMP=$WALBERLA_BUILD_WITH_OPENMP -DWALBERLA_DOUBLE_ACCURACY=$WALBERLA_DOUBLE_ACCURACY -DWARNING_ERROR=ON -G "$CMAKE_GENERATOR" -DCMAKE_DISABLE_FIND_PACKAGE_Boost=TRUE .. - MSBuild.exe walberla.sln /property:Configuration=$BUILD_CONFIGURATION /verbosity:minimal /maxcpucount:4 - ctest -LE $CTEST_EXCLUDE_LABELS -C $BUILD_CONFIGURATION --output-on-failure -j 4 variables: diff --git a/CMakeLists.txt b/CMakeLists.txt index d866ab63de3c13d35833fc9524e61e6019b6439e..c62caabc3a768c906fdee77e87b73a495798cfd2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ ## Contents: ## - definition of build options ## - compiler variables ( c++ standard, warnings etc. ) -## - Finding of service libraries. Required: boost, Optional: MPI, PE, METIS +## - Finding of service libraries. Required: none, Optional: Boost, MPI, FFTW3, METIS, OpenMesh, Python ## the include paths are set, and the libraries are added to variable SERVICE_LIBS ## - Subdirectory cmake lists are called ## -> src/ this folder contains all modules, each module (that contains c or cpp files) is linked to a @@ -136,7 +136,7 @@ endif() ############################################################################################################################ -set( CMAKE_CXX_STANDARD 14 ) +set( CMAKE_CXX_STANDARD 17 ) set( CMAKE_CXX_STANDARD_REQUIRED ON ) set( CMAKE_CXX_EXTENSIONS OFF ) @@ -170,10 +170,16 @@ if( CMAKE_CXX_COMPILER MATCHES "icpc" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "icpc" SET(CMAKE_LINKER "${XILD}") ENDIF(XILD) MARK_AS_ADVANCED(XILD) - if( CMAKE_VERSION VERSION_LESS 3.6.0 ) - set( CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14" ) + + if( CMAKE_VERSION VERSION_LESS 3.11.0 ) + set( CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17" ) + set( CMAKE_TRY_COMPILE_PLATFORM_VARIABLES CMAKE_CXX17_STANDARD_COMPILE_OPTION ) add_flag ( CMAKE_CXX_FLAGS ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ) endif() + if( CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.0.5" ) + # std::filesystem uses ABI tags, which don't work 19.0.2 but do in 19.0.5 + add_flag ( CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=0" ) + endif() else() option ( WALBERLA_CXX_COMPILER_IS_INTEL "Use Intel compiler" OFF ) endif() @@ -285,7 +291,8 @@ endif() # C++ language features for NEC compiler if( WALBERLA_CXX_COMPILER_IS_NEC ) - set( CMAKE_CXX14_STANDARD_COMPILE_OPTION "-Kcpp14" ) + set( CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION "-Kcpp${CMAKE_CXX_STANDARD}" ) + set( CMAKE_TRY_COMPILE_PLATFORM_VARIABLES CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION ) add_flag ( CMAKE_CXX_FLAGS "${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} -Krtti -Kexceptions -size_t64 -Kgcc" ) add_flag ( CMAKE_CXX_FLAGS "-D__BIG_ENDIAN -D__BYTE_ORDER=__BIG_ENDIAN" ) add_flag ( CMAKE_CXX_FLAGS "-Tnoauto,used" ) @@ -314,7 +321,6 @@ endif() if( WALBERLA_CXX_COMPILER_IS_IBM ) add_flag ( CMAKE_CXX_FLAGS "-qsuppress=1586-267" ) # 1586-267 (I) Inlining of specified subprogram failed due to the presence of a C++ exception handler add_flag ( CMAKE_CXX_FLAGS "-qsuppress=1586-266" ) # 1586-266 (I) Inlining of specified subprogram failed due to the presence of a global label - add_flag ( CMAKE_CXX_FLAGS "-qsuppress=1540-0724" ) # 1540-0724 (W) The non-type template argument "2147483648" of type "T" has wrapped [coming from boost/integer_traits.hpp] add_flag ( CMAKE_CXX_FLAGS "-qsuppress=1500-030" ) # 1500-030: (I) INFORMATION: [...] Additional optimization may be attained by recompiling and specifying MAXMEM option with a value greater than 8192. add_flag ( CMAKE_C_FLAGS "-qsuppress=1500-030" ) # 1500-030: (I) INFORMATION: [...] Additional optimization may be attained by recompiling and specifying MAXMEM option with a value greater than 8192. endif() @@ -366,7 +372,6 @@ endif() if ( WALBERLA_CXX_COMPILER_IS_CLANG ) add_flag ( CMAKE_CXX_FLAGS "-Wall -Wconversion -Wshadow -Wno-c++11-extensions -Qunused-arguments" ) - add_flag ( CMAKE_CXX_FLAGS "-D'_LIBCPP_EXTERN_TEMPLATE(...)='") endif ( ) if( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL OR WALBERLA_CXX_COMPILER_IS_CLANG ) @@ -433,25 +438,24 @@ endif() ############################################################################################################################ ## -## Find optional C++ libraries +## Find newer C++ libraries, which may only be available in std::experimental on some compilers ## ############################################################################################################################ try_compile( WALBERLA_USE_STD_FILESYSTEM "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdFilesystem.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_FILESYSTEM ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ) + COMPILE_DEFINITIONS -DWALBERLA_USE_STD_FILESYSTEM ) if( WALBERLA_USE_STD_FILESYSTEM ) message( STATUS "Found std::filesystem") else() try_compile( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdFilesystem.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ) + COMPILE_DEFINITIONS -DWALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ) if( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ) message( STATUS "Found std::experimental::filesystem") endif() if( NOT WALBERLA_CXX_COMPILER_IS_MSVC AND NOT WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ) unset( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM CACHE ) try_compile( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdFilesystem.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} - LINK_LIBRARIES stdc++fs ) + COMPILE_DEFINITIONS -DWALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM LINK_LIBRARIES stdc++fs ) if( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ) message( STATUS "Found std::experimental::filesystem in libstdc++fs") list ( APPEND SERVICE_LIBS -lstdc++fs ) @@ -460,47 +464,23 @@ else() if( NOT WALBERLA_CXX_COMPILER_IS_MSVC AND NOT WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ) unset( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM CACHE ) try_compile( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdFilesystem.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} - LINK_LIBRARIES c++experimental ) + COMPILE_DEFINITIONS -DWALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM LINK_LIBRARIES c++experimental ) if( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ) message( STATUS "Found std::experimental::filesystem in libc++experimental") list ( APPEND SERVICE_LIBS -lc++experimental ) endif() endif() -endif() - -try_compile( WALBERLA_USE_STD_ANY "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdAny.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_ANY ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ) -if( WALBERLA_USE_STD_ANY ) - message( STATUS "Found std::any") -else() - try_compile( WALBERLA_USE_STD_EXPERIMENTAL_ANY "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdAny.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_EXPERIMENTAL_ANY ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ) - if( WALBERLA_USE_STD_EXPERIMENTAL_ANY ) - message( STATUS "Found std::experimental::any") - endif() -endif() - -try_compile( WALBERLA_USE_STD_OPTIONAL "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdOptional.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_OPTIONAL ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ) -if( WALBERLA_USE_STD_OPTIONAL ) - message( STATUS "Found std::optional") -else() - try_compile( WALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdOptional.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ) - if( WALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL ) - message( STATUS "Found std::experimental::optional") + if( NOT WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM AND NOT WALBERLA_USE_STD_FILESYSTEM) + message(FATAL_ERROR "Neither std::filesystem nor std::experimental::filesystem are available") endif() endif() -try_compile( WALBERLA_USE_STD_VARIANT "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdVariant.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_VARIANT ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ) -if( WALBERLA_USE_STD_VARIANT ) - message( STATUS "Found std::variant") +if (WALBERLA_BUILD_WITH_CUDA AND CUDA_VERSION VERSION_LESS "11.0") + # CUDA < 11 does not support C++17. std::experimental::any works with C++14, unlike std::any. + set(WALBERLA_USE_STD_EXPERIMENTAL_ANY 1) endif() - ############################################################################################################################ ## ## Visual Studio Setup @@ -593,10 +573,17 @@ if ( WALBERLA_BUILD_WITH_PYTHON ) message( FATAL_ERROR "Couldn't find any python library" ) endif() + if(WALBERLA_CXX_COMPILER_IS_INTEL) + # Intel C++17 support introduced in 2.6.2 (https://github.com/pybind/pybind11/pull/2729) + set(PYBIND11_MINIMUM_VERSION "2.6.2") + else() + set(PYBIND11_MINIMUM_VERSION "2.6.0") + endif() + execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import pybind11; print(pybind11._version.__version__)" OUTPUT_VARIABLE pybind11_VERSION ERROR_QUIET RESULT_VARIABLE pybind11_VERSION_RESULT) string(STRIP "${pybind11_VERSION}" pybind11_VERSION) - if(pybind11_VERSION_RESULT EQUAL "0" AND pybind11_VERSION VERSION_GREATER_EQUAL "2.6.0") + if(pybind11_VERSION_RESULT EQUAL "0" AND pybind11_VERSION VERSION_GREATER_EQUAL "${PYBIND11_MINIMUM_VERSION}") execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pybind11 --cmakedir OUTPUT_VARIABLE PYBIND11_CMAKE_PATH) string(STRIP "${PYBIND11_CMAKE_PATH}" PYBIND11_CMAKE_PATH) @@ -626,10 +613,12 @@ if ( WALBERLA_BUILD_WITH_PYTHON ) add_subdirectory(extern/pybind11) - # if pybind11 was installed into ${PYTHON_INCLUDE_DIR} (e.g. by pip), that will have a higher priority than the Git submodule unless we reorder the search path - # introduced in 2.6.0 (https://github.com/pybind/pybind11/issues/2709), fixed in 2.6.2 (https://github.com/pybind/pybind11/pull/2716) - set_property( TARGET pybind11::pybind11 - PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${PROJECT_SOURCE_DIR}/extern/pybind11/include" "${PYTHON_INCLUDE_DIR}") + if(pybind11_VERSION VERSION_LESS "2.6.2") + # if pybind11 was installed into ${PYTHON_INCLUDE_DIR} (e.g. by pip), that will have a higher priority than the Git submodule unless we reorder the search path + # introduced in 2.6.0 (https://github.com/pybind/pybind11/issues/2709), fixed in 2.6.2 (https://github.com/pybind/pybind11/pull/2716) + set_property( TARGET pybind11::pybind11 + PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${PROJECT_SOURCE_DIR}/extern/pybind11/include" "${PYTHON_INCLUDE_DIR}") + endif() endif() # a python module is a shared library - so everything has to be compiled to position independent code @@ -652,25 +641,14 @@ endif() ## BOOST Libraries ## ############################################################################################################################# -set ( waLBerla_REQUIRED_MIN_BOOST_VERSION "1.48") set ( Boost_NO_BOOST_CMAKE ON) -if ( NOT WALBERLA_USE_STD_FILESYSTEM AND NOT WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ) - list ( APPEND waLBerla_REQUIRED_BOOST_COMPONENTS filesystem system ) -else() - list ( APPEND waLBerla_OPTIONAL_BOOST_COMPONENTS system ) -endif() - # This variable is necessary, if the CMAKE version used is not aware of a more recent boost version (keep this up to date!) set ( Boost_ADDITIONAL_VERSIONS "1.45" "1.45.0" "1.46" "1.46.0" "1.46.1" "1.47" "1.47.0" "1.48" "1.48.0" "1.49" "1.49.0" "1.50" "1.50.0" "1.51" "1.51.0" "1.52" "1.52.0" "1.53" "1.53.0" "1.54" "1.54.0" "1.55" "1.55.0" "1.56" "1.56.0" "1.57" "1.57.0" "1.58" "1.58.0" "1.59" "1.59.0" "1.60" "1.60.0" "1.61" "1.61.0" "1.62" "1.62.0" "1.63" "1.63.0" - "1.64.0" "1.65.0" "1.65.1" "1.66.0" "1.67.0" "1.68.0" "1.69.0" "1.70.0" "1.71.0" "1.72.0" "1.73.0") - -set ( Boost_USE_STATIC_LIBS OFF CACHE BOOL "Use boost static libraries" ) -set ( Boost_USE_MULTITHREADED OFF CACHE BOOL "Use boost multithreaded libraries" ) -set ( Boost_USE_STATIC_RUNTIME OFF CACHE BOOL "Use boost libraries statically linked to runtime libs" ) + "1.64.0" "1.65.0" "1.65.1" "1.66.0" "1.67.0" "1.68.0" "1.69.0" "1.70.0" "1.71.0" "1.72.0" "1.73.0" "1.74.0") # if you defined BOOST_ROOT or BOOST_BASE in your environment use it here to find boost too if ( NOT BOOST_ROOT ) @@ -683,28 +661,7 @@ if ( NOT BOOST_ROOT ) endforeach ( ) endif ( ) -find_package ( Boost ${waLBerla_REQUIRED_MIN_BOOST_VERSION} COMPONENTS ${waLBerla_REQUIRED_BOOST_COMPONENTS} OPTIONAL_COMPONENTS ${waLBerla_OPTIONAL_BOOST_COMPONENTS} QUIET ) - -if( NOT Boost_FOUND ) - message ( WARNING - "The specified configuration of the BOOST libraries was not found on your system! Now trying some other configuration..." ) - foreach ( Boost_USE_STATIC_LIBS ON OFF ) - foreach ( Boost_USE_MULTITHREADED ON OFF ) - find_package ( Boost ${waLBerla_REQUIRED_MIN_BOOST_VERSION} COMPONENTS ${waLBerla_REQUIRED_BOOST_COMPONENTS} OPTIONAL_COMPONENTS ${waLBerla_OPTIONAL_BOOST_COMPONENTS} QUIET ) - if ( Boost_FOUND ) - set ( Boost_USE_STATIC_LIBS ${Boost_USE_STATIC_LIBS} CACHE BOOL "Use boost static libraries" FORCE ) - set ( Boost_USE_MULTITHREADED ${Boost_USE_MULTITHREADED} CACHE BOOL "Use boost multithreaded libraries" FORCE ) - set ( Boost_USE_MULTITHREADED_LIBRARY ${Boost_USE_MULTITHREADED} ) - message ( STATUS "Working configuration of the BOOST libraries was found :o)!" ) - message ( STATUS "Boost_USE_STATIC_LIBS and Boost_USE_MULTITHREADED was adapted accordingly." ) - BREAK ( ) - endif ( Boost_FOUND ) - endforeach ( Boost_USE_MULTITHREADED ) - if ( Boost_FOUND ) - BREAK ( ) - endif ( Boost_FOUND ) - endforeach ( Boost_USE_STATIC_LIBS ) -endif ( NOT Boost_FOUND ) +find_package ( Boost ) if ( Boost_FOUND ) if(CMAKE_GENERATOR STREQUAL "Xcode") @@ -713,24 +670,11 @@ if ( Boost_FOUND ) else() include_directories ( SYSTEM ${Boost_INCLUDE_DIRS} ) endif() - if( waLBerla_REQUIRED_BOOST_COMPONENTS ) - link_directories ( ${Boost_LIBRARY_DIRS} ) - list ( APPEND SERVICE_LIBS ${Boost_LIBRARIES} ) - endif() add_definitions ( -DBOOST_ALL_NO_LIB ) # Disable Boost auto-linking (CMAKE does that for us...) set( WALBERLA_BUILD_WITH_BOOST TRUE CACHE INTERNAL "Build with Boost" ) else( Boost_FOUND ) - if( (WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM OR WALBERLA_USE_STD_FILESYSTEM) AND (WALBERLA_USE_STD_EXPERIMENTAL_ANY OR WALBERLA_USE_STD_ANY) AND (WALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL OR WALBERLA_USE_STD_OPTIONAL) AND NOT WALBERLA_BUILD_WITH_PYTHON) - # we don't really need Boost - set( WALBERLA_BUILD_WITH_BOOST FALSE CACHE INTERNAL "Build with Boost" ) - else() - # Search again, this time with the REQUIRED option. This will give a CMAKE error and a detailed error message for the user - find_package ( Boost ${waLBerla_REQUIRED_MIN_BOOST_VERSION} REQUIRED ${waLBerla_REQUIRED_BOOST_COMPONENTS} OPTIONAL_COMPONENTS ${waLBerla_OPTIONAL_BOOST_COMPONENTS} ) - if( (WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM OR WALBERLA_USE_STD_FILESYSTEM) AND (WALBERLA_USE_STD_EXPERIMENTAL_ANY OR WALBERLA_USE_STD_ANY) AND (WALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL OR WALBERLA_USE_STD_OPTIONAL) ) - message(WARNING "If you set WALBERLA_BUILD_WITH_PYTHON=OFF, you can build without the Boost library.") - endif() - endif() + set( WALBERLA_BUILD_WITH_BOOST FALSE CACHE INTERNAL "Build with Boost" ) endif( Boost_FOUND ) @@ -864,10 +808,6 @@ if ( WALBERLA_ENABLE_GUI ) INCLUDE( ${QT_USE_FILE} ) list ( APPEND SERVICE_LIBS ${OPENGL_LIBRARIES} ${QT_LIBRARIES} ) - # Workaround for Qt4 moc and newer boost versions - moc cannot parse BOOST_JOIN - # so additional defines are passed to the moc compiler that prevent the problematic header to be parsed - set( QT_MOC_EXECUTABLE ${QT_MOC_EXECUTABLE} -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED ) - endif(WALBERLA_ENABLE_GUI) ############################################################################################################################ diff --git a/README.md b/README.md index 40e176fb857656554a600748f73aa019389782f2..9d87364cf6bf7d1cd6f9794133d5d2183483eed0 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,8 @@ is documented in [Sphinx](http://walberla.net/sphinx/index.html). ## Getting started -The minimum requirements are a C++14-compliant compiler (e.g. GCC or Clang), -the [Boost](http://www.boost.org) library and the [CMake](http://www.cmake.org) +The minimum requirements are a C++17-compliant compiler (e.g. GCC or Clang) +and the [CMake](http://www.cmake.org) build system. Furthermore, you need an MPI library (like [Open MPI](http://www.open-mpi.org)) if you want to make use of parallel processing capabilities. All of these dependencies are typically available in diff --git a/cmake/TestStdAny.cpp b/cmake/TestStdAny.cpp deleted file mode 100644 index 6bcc880a6134bf1c0c538f6a32e92f87f6d1e8ea..0000000000000000000000000000000000000000 --- a/cmake/TestStdAny.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include <iostream> -#if defined(WALBERLA_USE_STD_ANY) -#include <any> -#elif defined(WALBERLA_USE_STD_EXPERIMENTAL_ANY) -#include <experimental/any> -#endif - -int main() { -#if defined(WALBERLA_USE_STD_ANY) - auto a = std::any(42); - std::cout << std::any_cast<int>(a) << std::endl; -#elif defined(WALBERLA_USE_STD_EXPERIMENTAL_ANY) - auto a = std::experimental::any(42); - std::cout << std::experimental::any_cast<int>(a) << std::endl; -#endif - return 0; -} diff --git a/cmake/TestStdOptional.cpp b/cmake/TestStdOptional.cpp deleted file mode 100644 index fc3a148c128e534eb37fc635c697d1e88961a6db..0000000000000000000000000000000000000000 --- a/cmake/TestStdOptional.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include <iostream> -#if defined(WALBERLA_USE_STD_OPTIONAL) -#include <optional> -#elif defined(WALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL) -#include <experimental/optional> -#endif - -int main() { -#if defined(WALBERLA_USE_STD_OPTIONAL) - auto a = std::optional<int>(); - auto b = std::optional<int>(42); -#elif defined(WALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL) - auto a = std::experimental::optional<int>(); - auto b = std::experimental::optional<int>(42); -#endif - if (b) - std::cout << a.value_or(b.value()) << std::endl; - return 0; -} diff --git a/cmake/TestStdVariant.cpp b/cmake/TestStdVariant.cpp deleted file mode 100644 index be98d121ffcfbc96d73948fee5ed67e0f75e8256..0000000000000000000000000000000000000000 --- a/cmake/TestStdVariant.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include <iostream> -#include <variant> - -int main() { - std::variant<int,float> a; - return 0; -} diff --git a/cmake/waLBerlaFunctions.cmake b/cmake/waLBerlaFunctions.cmake index a5822aa849337b6550dc5d546899d85bd2978d9e..f4c4b1f6807d2ae0495ef981581c69bb95f2484b 100644 --- a/cmake/waLBerlaFunctions.cmake +++ b/cmake/waLBerlaFunctions.cmake @@ -99,7 +99,7 @@ function ( waLBerla_add_module ) waLBerla_register_dependency ( ${moduleName} ${ARG_DEPENDS} ) - set_property( TARGET ${moduleName} PROPERTY CXX_STANDARD 14 ) + set_property( TARGET ${moduleName} PROPERTY CXX_STANDARD ${CMAKE_CXX_STANDARD} ) # This property is needed for visual studio to group modules together if( WALBERLA_GROUP_PROJECTS ) @@ -204,7 +204,7 @@ function ( waLBerla_add_executable ) target_link_modules ( ${ARG_NAME} ${ARG_DEPENDS} ) target_link_libraries( ${ARG_NAME} ${WALBERLA_LINK_LIBRARIES_KEYWORD} ${SERVICE_LIBS} ) - set_property( TARGET ${ARG_NAME} PROPERTY CXX_STANDARD 14 ) + set_property( TARGET ${ARG_NAME} PROPERTY CXX_STANDARD ${CMAKE_CXX_STANDARD} ) if( WALBERLA_GROUP_PROJECTS ) if( NOT ARG_GROUP ) diff --git a/doc/setup.dox b/doc/setup.dox index e740b0e0408ec1c075c66b4baf58c7c7608b062c..ab9ba0588aa13b53cb631ed84d226f2c3a03d520 100644 --- a/doc/setup.dox +++ b/doc/setup.dox @@ -22,12 +22,6 @@ If you are not familiar with the git version control system, this To compile waLBerla with all modules and features a few third-party libraries are required. -\subsubsection libs_boost Boost -The boost library is the only required third-party library. It is installed on -most Linux system by default and should be detected by cmake. -If boost resides at a non-standard location, you have to set the environment variable -`BOOST_ROOT` in order to have it detected by cmake. - \subsubsection libs_mpi MPI (optional) The message passing interface (MPI) library is required if you want to run waLBerla with distributed memory parallelization. If MPI is not installed on your system, diff --git a/extern/pybind11 b/extern/pybind11 index 526a7733c773016f2e552777612027954d0765fd..687c69625bd2b96ac0596d1a9cc0ab2101485d70 160000 --- a/extern/pybind11 +++ b/extern/pybind11 @@ -1 +1 @@ -Subproject commit 526a7733c773016f2e552777612027954d0765fd +Subproject commit 687c69625bd2b96ac0596d1a9cc0ab2101485d70 diff --git a/src/blockforest/PhantomBlock.h b/src/blockforest/PhantomBlock.h index e5d95c6c996f46936a4fb9160013f8997ba2f359..0df6986903e2b9b0e98ad4da76f9fea7d28e1bf3 100644 --- a/src/blockforest/PhantomBlock.h +++ b/src/blockforest/PhantomBlock.h @@ -88,7 +88,7 @@ public: T getData() const { return walberla::any_cast<T>( data_ ); } bool hasData() const { -#ifdef WALBERLA_USE_STD_ANY +#ifndef WALBERLA_USE_STD_EXPERIMENTAL_ANY return data_.has_value(); #else return !(data_.empty()); diff --git a/src/core/Any.h b/src/core/Any.h index ac2f9dbb3f88be5fd0155ccd138dea9f33f74a94..a7bdfaea4837fcbcbe55e7642412f54f0ab9e3f9 100644 --- a/src/core/Any.h +++ b/src/core/Any.h @@ -21,29 +21,25 @@ #pragma once +#include "waLBerlaDefinitions.h" -#if defined(WALBERLA_USE_STD_ANY) +#ifndef WALBERLA_USE_STD_EXPERIMENTAL_ANY #include <any> -#elif defined(WALBERLA_USE_STD_EXPERIMENTAL_ANY) +#else #undef _LIBCPP_WARN_ON_DEPRECATED_EXPERIMENTAL_HEADER #include <experimental/any> -#else -#include <boost/any.hpp> #endif namespace walberla { -#if defined(WALBERLA_USE_STD_ANY) +#ifndef WALBERLA_USE_STD_EXPERIMENTAL_ANY using std::any; using std::any_cast; -#elif defined(WALBERLA_USE_STD_EXPERIMENTAL_ANY) +#else using std::experimental::any; using std::experimental::any_cast; -#else -using boost::any; -using boost::any_cast; #endif } diff --git a/src/core/ConcatIterator.h b/src/core/ConcatIterator.h index b21ce3705b9c10b339cf8295918aee50a4948a73..f76c79f6238e1d02f4191e15d015519e383f3a6f 100644 --- a/src/core/ConcatIterator.h +++ b/src/core/ConcatIterator.h @@ -27,9 +27,15 @@ namespace walberla { template< typename T > -class ConcatIterator : public std::iterator< std::input_iterator_tag, typename T::value_type, typename T::difference_type, typename T::pointer, typename T::reference > +class ConcatIterator { public: + using iterator_category = std::input_iterator_tag; + using value_type = typename T::value_type; + using difference_type = typename T::difference_type; + using pointer = typename T::pointer; + using reference = typename T::reference; + /// default constructed iterator points to end() ConcatIterator( ) : ended_( true ) diff --git a/src/core/Environment.cpp b/src/core/Environment.cpp index 015687ce3bba28e3ffc393d6df1e3b788621f49d..684f6f8e22dcdb50106591111fc1b0ce2591345d 100644 --- a/src/core/Environment.cpp +++ b/src/core/Environment.cpp @@ -82,7 +82,7 @@ void configureGlobalState( const shared_ptr<Config> & config ) { std::string suids = config->getParameter< std::string >( "GlobalState" ); std::vector< std::string > states = string_split( suids, ", \t" ); - states.erase( std::remove_if( states.begin(), states.end(), std::bind( &std::string::empty, std::placeholders::_1 ) ), states.end() ); + states.erase( std::remove_if( states.begin(), states.end(), [](auto &s){ return s.empty(); } ), states.end() ); Set<SUID> state; for( auto it = states.begin(); it != states.end(); ++it ) diff --git a/src/core/Filesystem.h b/src/core/Filesystem.h index 24e14a8683a99b3798d732e5df4a5ae19f729b4e..beaf77ad00e28335681dff0a85df599709a0f59d 100644 --- a/src/core/Filesystem.h +++ b/src/core/Filesystem.h @@ -21,14 +21,13 @@ #pragma once +#include "waLBerlaDefinitions.h" -#if defined(WALBERLA_USE_STD_FILESYSTEM) +#ifndef WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM #include <filesystem> -#elif defined(WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM) +#else #define _LIBCPP_NO_EXPERIMENTAL_DEPRECATION_WARNING_FILESYSTEM #include <experimental/filesystem> -#else -#include <boost/filesystem.hpp> #endif @@ -36,12 +35,10 @@ namespace walberla { namespace filesystem { -#if defined(WALBERLA_USE_STD_FILESYSTEM) +#ifndef WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM using namespace std::filesystem; -#elif defined(WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM) -using namespace std::experimental::filesystem; #else -using namespace boost::filesystem; +using namespace std::experimental::filesystem; #endif } diff --git a/src/core/Optional.h b/src/core/Optional.h index 60883fd3d63a7366f40119aff89eddc351045db6..5c31a1ec007286e02a8f413838fd3ad7dbd35241 100644 --- a/src/core/Optional.h +++ b/src/core/Optional.h @@ -21,29 +21,15 @@ #pragma once +#include "waLBerlaDefinitions.h" -#if defined(WALBERLA_USE_STD_OPTIONAL) #include <optional> -#elif defined(WALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL) -#undef _LIBCPP_WARN_ON_DEPRECATED_EXPERIMENTAL_HEADER -#include <experimental/optional> -#else -#include <boost/optional.hpp> -#endif namespace walberla { -#if defined(WALBERLA_USE_STD_OPTIONAL) using std::optional; using std::nullopt; -#elif defined(WALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL) -using std::experimental::optional; -using std::experimental::nullopt; -#else -using boost::optional; -const boost::none_t nullopt = boost::none; -#endif } diff --git a/src/core/Variant.h b/src/core/Variant.h index 7fe6d195afcacf49b0c1dea05d14edc61d0b408d..2be3f0a6c09e562dd48ef54b460dc08d786683d6 100644 --- a/src/core/Variant.h +++ b/src/core/Variant.h @@ -22,37 +22,17 @@ #pragma once -#if defined(WALBERLA_USE_STD_VARIANT) #include <variant> -#else -#include <boost/variant.hpp> -#endif namespace walberla { -#if defined(WALBERLA_USE_STD_VARIANT) using std::variant; using std::visit; using std::get; using std::holds_alternative; using std::bad_variant_access; -#else -using boost::variant; -using boost::get; -template <class T, class... Types> -constexpr bool holds_alternative( const boost::variant<Types...>& v ) noexcept -{ - return v.type() == typeid( T ); -} -using bad_variant_access = boost::bad_get; -template<typename Visitor, typename... Variant> -decltype( auto ) visit( Visitor&& visitor, Variant&& ... variant ) -{ - return boost::apply_visitor( visitor, variant... ); -} -#endif } diff --git a/src/core/grid_generator/HCPIterator.h b/src/core/grid_generator/HCPIterator.h index dc84a29c61176ff55edd8e7ae53e3b8795ec8915..dfc806d116a860e15c00a3c04a37ba30b607bc8a 100644 --- a/src/core/grid_generator/HCPIterator.h +++ b/src/core/grid_generator/HCPIterator.h @@ -33,9 +33,15 @@ namespace grid_generator { /// /// Usage: /// \code for (auto it = HCPIterator::begin(...); it != HCPIterator::end(); ++it) \endcode -class HCPIterator : public std::iterator< std::forward_iterator_tag, Vector3<real_t> > +class HCPIterator { public: + using iterator_category = std::forward_iterator_tag; + using value_type = Vector3<real_t>; + using difference_type = std::ptrdiff_t; + using pointer = Vector3<real_t>*; + using reference = Vector3<real_t>&; + /** * @brief begin iterator * @param domain volume were lattice points will be returned diff --git a/src/core/grid_generator/SCIterator.h b/src/core/grid_generator/SCIterator.h index 4946f8dbd3b4d5d55fb857773e4d9c1c141e0743..7068bd3de13504a745b3f24ca7ccc58ec3be2ad5 100644 --- a/src/core/grid_generator/SCIterator.h +++ b/src/core/grid_generator/SCIterator.h @@ -46,9 +46,15 @@ namespace grid_generator { /// \endcode /// Usage: /// \code for (auto it = SCIterator::begin(...); it != SCIterator::end(); ++it) \endcode -class SCIterator : public std::iterator< std::forward_iterator_tag, Vector3<real_t> > +class SCIterator { public: + using iterator_category = std::forward_iterator_tag; + using value_type = Vector3<real_t>; + using difference_type = std::ptrdiff_t; + using pointer = Vector3<real_t>*; + using reference = Vector3<real_t>&; + /** * @brief begin iterator * @param domain volume were lattice points will be returned diff --git a/src/core/mpi/BufferDataTypeExtensions.h b/src/core/mpi/BufferDataTypeExtensions.h index 9685d6ac2d7a14b7bd68e162e81c27f7254e02b7..3196b5362bd1803582bf64dcd47f2819f1065e9d 100644 --- a/src/core/mpi/BufferDataTypeExtensions.h +++ b/src/core/mpi/BufferDataTypeExtensions.h @@ -28,7 +28,9 @@ #include "core/Conversion.h" #include "core/DataTypes.h" #include "core/math/Uint.h" +#if __cplusplus >= 201703L || defined(_MSC_VER) #include "core/Optional.h" +#endif #include "core/RandomUUID.h" #include <array> @@ -564,6 +566,7 @@ template<typename T, typename K, typename C, typename A> struct BufferSizeTrait< std::multimap<K,T,C,A> > { static const bool constantSize = false; }; +#if __cplusplus >= 201703L || defined(_MSC_VER) // --------------------------------------------------------------------------------------------------------------------- // ------------------------------------------- optional Support -------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------- @@ -614,6 +617,7 @@ GenericRecvBuffer<T>& operator>>( GenericRecvBuffer<T> & buf, walberla::optional return buf; } +#endif // --------------------------------------------------------------------------------------------------------------------- // --------------------------------------- RandomUUID Support ---------------------------------------------------------- diff --git a/src/domain_decomposition/BlockStorage.h b/src/domain_decomposition/BlockStorage.h index 34789a47b625f8db032975c470a8efdff312e51b..e00f3ee86ba7c157f2c0ebaa49530fa19768e8eb 100644 --- a/src/domain_decomposition/BlockStorage.h +++ b/src/domain_decomposition/BlockStorage.h @@ -77,10 +77,15 @@ public: class const_iterator; - class iterator : public std::iterator <std::forward_iterator_tag, IBlock > { + class iterator { friend class const_iterator; friend class BlockStorage; public: + using iterator_category = std::forward_iterator_tag; + using value_type = IBlock; + using difference_type = std::ptrdiff_t; + using pointer = IBlock*; + using reference = IBlock&; iterator( const iterator & it ) : it_( it.it_ ), end_( it.end_ ), requiredSelectors_( it.requiredSelectors_ ), incompatibleSelectors_( it.incompatibleSelectors_ ) {} diff --git a/src/field/iterators/FieldIterator.h b/src/field/iterators/FieldIterator.h index 0136ce72728aee1fe8e4495925a37b166a8b50ce..faecf98228c877b22d49325384e53fb1bee35e9d 100644 --- a/src/field/iterators/FieldIterator.h +++ b/src/field/iterators/FieldIterator.h @@ -66,11 +66,16 @@ namespace field { */ //******************************************************************************************************************* template <typename T, uint_t fieldFSize> - class FieldIterator : public std::iterator <std::forward_iterator_tag,T> + class FieldIterator { public: + using iterator_category = std::forward_iterator_tag; + using value_type = T; + using difference_type = std::ptrdiff_t; + using pointer = T*; + using reference = T&; + typedef Field<typename std::remove_const<T>::type, fieldFSize> FieldType; - typedef T value_type; static const uint_t F_SIZE = fieldFSize; diff --git a/src/gather/CellGatherPackInfo.h b/src/gather/CellGatherPackInfo.h index d4cee6c5dff688bdadb1cf2726c02713be98c356..0055a2ba00e32838760221481114effa07b53049 100644 --- a/src/gather/CellGatherPackInfo.h +++ b/src/gather/CellGatherPackInfo.h @@ -124,7 +124,7 @@ protected: shared_ptr<DataProcessor> dataProcessor_; /// Helper class for sorting the receivedData array according to t-value - struct Compare : public std::binary_function<std::vector<real_t> , std::vector<real_t> ,bool> + struct Compare : public std::function<bool(std::vector<real_t> , std::vector<real_t>)> { inline bool operator()(const std::vector<real_t> & v1, const std::vector<real_t> & v2) const { return v1[0] < v2[0]; diff --git a/src/gather/CurveGatherPackInfo.h b/src/gather/CurveGatherPackInfo.h index f23b18ae6abc04845bedef1fb39e748250fd5243..112f018b3a70ac6e982c301c7ec18076546c48e0 100644 --- a/src/gather/CurveGatherPackInfo.h +++ b/src/gather/CurveGatherPackInfo.h @@ -193,7 +193,7 @@ class CurveGatherPackInfo : public GatherPackInfo /// Helper class for sorting the receivedData array according to t-value - struct Compare : public std::binary_function<std::vector<real_t> , std::vector<real_t> ,bool> + struct Compare : public std::function<bool(std::vector<real_t> , std::vector<real_t>)> { inline bool operator()(const std::vector<real_t> & v1, const std::vector<real_t> & v2) const { return v1[0] < v2[0]; diff --git a/src/mesa_pd/data/shape/ShapeTypes.cpp b/src/mesa_pd/data/shape/ShapeTypes.cpp deleted file mode 100644 index 4eb52cd05e295321ce953399eeb98ee7b7a8dc7f..0000000000000000000000000000000000000000 --- a/src/mesa_pd/data/shape/ShapeTypes.cpp +++ /dev/null @@ -1,39 +0,0 @@ -//====================================================================================================================== -// -// This file is part of waLBerla. waLBerla is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// waLBerla is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with waLBerla (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file -//! \author Sebastian Eibl <sebastian.eibl@fau.de> -// -//====================================================================================================================== - -#include <mesa_pd/data/shape/Box.h> -#include <mesa_pd/data/shape/CylindricalBoundary.h> -#include <mesa_pd/data/shape/HalfSpace.h> -#include <mesa_pd/data/shape/Ellipsoid.h> -#include <mesa_pd/data/shape/Sphere.h> - -namespace walberla { -namespace mesa_pd { -namespace data { - -const int Box::SHAPE_TYPE ; -const int CylindricalBoundary::SHAPE_TYPE; -const int HalfSpace::SHAPE_TYPE ; -const int Ellipsoid::SHAPE_TYPE ; -const int Sphere::SHAPE_TYPE ; - -} //namespace data -} //namespace mesa_pd -} //namespace walberla diff --git a/src/pe/rigidbody/BodyIterators.h b/src/pe/rigidbody/BodyIterators.h index 5f4ef40fc5bc9be40788c60af43cff52dea9972e..903a1195bb596929a501a9c55a722b54245b3806 100644 --- a/src/pe/rigidbody/BodyIterators.h +++ b/src/pe/rigidbody/BodyIterators.h @@ -34,10 +34,16 @@ class BodyIterator public: template< typename T > - class iterator : public std::iterator< std::input_iterator_tag, typename T::value_type, typename T::difference_type, typename T::pointer, typename T::reference > + class iterator { friend class BodyIterator; public: + using iterator_category = std::input_iterator_tag; + using value_type = typename T::value_type; + using difference_type = typename T::difference_type; + using pointer = typename T::pointer; + using reference = typename T::reference; + iterator & operator++() { ++it_; checkStateAndAdapt(); return *this; } // prefix ++X iterator operator++(int) { iterator it( *this ); operator++(); return it; }; // postfix X++ @@ -146,10 +152,16 @@ class LocalBodyIterator public: template< typename T > - class iterator : public std::iterator< std::input_iterator_tag, typename T::value_type, typename T::difference_type, typename T::pointer, typename T::reference > + class iterator { friend class LocalBodyIterator; public: + using iterator_category = std::input_iterator_tag; + using value_type = typename T::value_type; + using difference_type = typename T::difference_type; + using pointer = typename T::pointer; + using reference = typename T::reference; + iterator & operator++() { ++it_; checkStateAndAdapt(); return *this; } // prefix ++X iterator operator++(int) { iterator it( *this ); operator++(); return it; }; // postfix X++ @@ -236,10 +248,16 @@ class ShadowBodyIterator public: template< typename T > - class iterator : public std::iterator< std::input_iterator_tag, typename T::value_type, typename T::difference_type, typename T::pointer, typename T::reference > + class iterator { friend class ShadowBodyIterator; public: + using iterator_category = std::input_iterator_tag; + using value_type = typename T::value_type; + using difference_type = typename T::difference_type; + using pointer = typename T::pointer; + using reference = typename T::reference; + iterator & operator++() { ++it_; checkStateAndAdapt(); return *this; } // prefix ++X iterator operator++(int) { iterator it( *this ); operator++(); return it; }; // postfix X++ diff --git a/src/vtk/Initialization.cpp b/src/vtk/Initialization.cpp index 0b4fa456757bbe78a96d2b413d134201b809a145..4d88f1b21a8f989432a41d352661c7ae0c6936f7 100644 --- a/src/vtk/Initialization.cpp +++ b/src/vtk/Initialization.cpp @@ -42,7 +42,7 @@ static void splitVector( T& x, T& y, T& z, const Config::BlockHandle& bb, const std::string vector = bb.getParameter< std::string >( vertex ); coordinates = string_split( vector, "<,> \t" ); - coordinates.erase( std::remove_if( coordinates.begin(), coordinates.end(), std::bind( &std::string::empty, std::placeholders::_1 ) ), coordinates.end() ); + coordinates.erase( std::remove_if( coordinates.begin(), coordinates.end(), [](auto &s){ return s.empty(); } ), coordinates.end() ); if( coordinates.size() != 3 ) WALBERLA_ABORT( errorMsg ); @@ -59,7 +59,7 @@ static std::vector< std::string > splitList( const std::string& string ) std::vector< std::string > list; list = string_split( string, ", \t" ); - list.erase( std::remove_if( list.begin(), list.end(), std::bind( &std::string::empty, std::placeholders::_1 ) ), list.end() ); + list.erase( std::remove_if( list.begin(), list.end(), [](auto &s){ return s.empty(); } ), list.end() ); return list; } @@ -70,7 +70,7 @@ static void addStates( Set<SUID>& set, const std::string& string ) { std::vector< std::string > states; states = string_split( string, ", \t" ); - states.erase( std::remove_if( states.begin(), states.end(), std::bind( &std::string::empty, std::placeholders::_1 ) ), states.end() ); + states.erase( std::remove_if( states.begin(), states.end(), [](auto &s){ return s.empty(); } ), states.end() ); for( auto it = states.begin(); it != states.end(); ++it ) set += SUID( *it ); diff --git a/src/waLBerlaDefinitions.in.h b/src/waLBerlaDefinitions.in.h index 21d1dd6d3ff0bb989e7fe75f367ddf6b3a4eea3a..c729cd2afd5e085be341517a3442d1d7e469273b 100644 --- a/src/waLBerlaDefinitions.in.h +++ b/src/waLBerlaDefinitions.in.h @@ -51,12 +51,7 @@ #cmakedefine WALBERLA_CXX_COMPILER_IS_CLANG #cmakedefine WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM -#cmakedefine WALBERLA_USE_STD_FILESYSTEM #cmakedefine WALBERLA_USE_STD_EXPERIMENTAL_ANY -#cmakedefine WALBERLA_USE_STD_ANY -#cmakedefine WALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL -#cmakedefine WALBERLA_USE_STD_OPTIONAL -#cmakedefine WALBERLA_USE_STD_VARIANT #cmakedefine WALBERLA_BUILD_WITH_BACKTRACE #ifdef WALBERLA_BUILD_WITH_BACKTRACE #define WALBERLA_BACKTRACE_HEADER "${Backtrace_HEADER}" diff --git a/tests/core/CMakeLists.txt b/tests/core/CMakeLists.txt index 89583aadb357cb7d96576e1ffe64833d01fadfda..df07f5c8f875f049eda973f5cbaa0a46baf6a927 100644 --- a/tests/core/CMakeLists.txt +++ b/tests/core/CMakeLists.txt @@ -220,7 +220,7 @@ waLBerla_execute_test( NAME UNIQUEID PROCESSES 4) waLBerla_compile_test( FILES VersionTest.cpp ) waLBerla_execute_test( NAME VersionTest ) -if( WALBERLA_BUILD_WITH_BOOST OR WALBERLA_USE_STD_VARIANT ) +if ( WALBERLA_CXX_COMPILER_IS_INTEL AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "20.0" ) waLBerla_compile_test( FILES VariantTest ) waLBerla_execute_test( NAME VariantTest ) endif() diff --git a/tests/core/VariantTest.cpp b/tests/core/VariantTest.cpp index a879b5b98a7020a93f51bcb20ea1baf952a97eba..89eaf99ea13a6b7570238baef23eb4aa45df4efc 100644 --- a/tests/core/VariantTest.cpp +++ b/tests/core/VariantTest.cpp @@ -41,36 +41,31 @@ int main( int /*argc*/, char** /*argv*/ ) walberla::variant<int, float> v, w; v = 12; // v contains int int i = walberla::get<int>( v ); -#ifdef WALBERLA_USE_STD_VARIANT - WALBERLA_CHECK( i == 12 ); // boost::variant cannot use == with variant and type -#endif WALBERLA_CHECK( 0 == 12 - i ); w = walberla::get<int>( v ); w = v; -#ifdef WALBERLA_USE_STD_VARIANT - WALBERLA_CHECK( w == 12 ); // boost::variant cannot use == with variant and type -#endif WALBERLA_CHECK( 0 == 12 - i ); // walberla::get<double>(v); // error: no double in [int, float] // walberla::get<3>(v); // error: valid index values are 0 and 1 try { - walberla::get<float>( w ); // w contains int, not float: will throw + float f = walberla::get<float>( w ); // w contains int, not float: will throw + std::cout << f << std::endl; } catch ( const walberla::bad_variant_access& ) {} walberla::variant<std::string> x( "abc" ); // converting constructors work when unambiguous x = "def"; // converting assignment also works when unambiguous std::cout << "hallo" << std::endl; - walberla::variant<std::string, bool> y( "abc" ); // casts to bool when passed a char const * + walberla::variant<std::string, bool> y( true ); std::cout << "eoo" << std::endl; WALBERLA_CHECK( walberla::holds_alternative<bool>( y ) ); // succeeds y = "xyz"s; WALBERLA_CHECK( walberla::holds_alternative<std::string>( y ) ); //succeeds std::cout << "bye" << std::endl; - std::vector<var_t> vec {10, 15l, 1.5, "hello"}; + std::vector<var_t> vec = {10, 15l, 1.5, "hello"}; for ( auto& z : vec ) { // 1. void visitor, only called for side-effects (here, for I/O) diff --git a/tests/timeloop/TimeloopAndSweepRegister.cpp b/tests/timeloop/TimeloopAndSweepRegister.cpp index 9e0a2d39bf242b9c10cf1ae73de599289e852893..028e5fad7f743d55ab8a79024952879425858990 100644 --- a/tests/timeloop/TimeloopAndSweepRegister.cpp +++ b/tests/timeloop/TimeloopAndSweepRegister.cpp @@ -30,7 +30,6 @@ using namespace std; -using namespace boost; using namespace walberla; diff --git a/utilities/conda/walberla/bld.bat b/utilities/conda/walberla/bld.bat index 2b90c35b57b16db99cbfce74ab065934ec4ccd9f..64c851061b24b4c908c7cec4150d4fcf063e110c 100644 --- a/utilities/conda/walberla/bld.bat +++ b/utilities/conda/walberla/bld.bat @@ -6,9 +6,7 @@ cmake -LAH -G"Visual Studio 15 2017 Win64" ^ -DWALBERLA_BUILD_WITH_PYTHON=ON ^ -DWALBERLA_BUILD_WITH_MPI=OFF ^ -DWALBERLA_BUILD_WITH_OPENMP=ON ^ - -DPYTHON_EXECUTABLE="%PYTHON%" ^ - -DBoost_USE_STATIC_LIBS=OFF ^ - -DBoost_USE_MULTITHREADED=ON .. + -DPYTHON_EXECUTABLE="%PYTHON%" .. if errorlevel 1 exit 1 cmake --build . --config Release --target pythonModuleInstall diff --git a/utilities/conda/walberla/meta.yaml b/utilities/conda/walberla/meta.yaml index 2148479bbb815ac49d584f8a4d79995adaed5a94..80a1cefc01735f4a792068f64548f147fdb5c001 100644 --- a/utilities/conda/walberla/meta.yaml +++ b/utilities/conda/walberla/meta.yaml @@ -14,12 +14,10 @@ requirements: - make host: - python - - boost - mpich [linux] - openmesh run: - python - - boost - numpy - mpich [linux] - openmesh