2013-08-02 14:07:33 +02:00
###########################################################################
# #
# Note: The bulk of the build system is located in the cmake/ directory. #
# This file only contains the specializations for this particular #
# project. Most likely you are interested in editing one of these #
# files instead: #
# #
# dune.module Name and version number #
# CMakeLists_files.cmake Path of source files #
# cmake/Modules/${project}-prereqs.cmake Dependencies #
# #
###########################################################################
2013-05-15 10:40:00 +02:00
2017-09-15 11:17:40 +02:00
# Mandatory call to project
2019-12-03 14:10:21 +01:00
2021-03-26 09:36:18 +01:00
cmake_minimum_required ( VERSION 3.10 )
2013-05-15 10:40:00 +02:00
2024-03-07 15:24:24 +01:00
project ( opm-simulators C CXX )
2019-12-03 14:10:21 +01:00
2015-05-27 11:51:28 +02:00
option ( SIBLING_SEARCH "Search for other modules in sibling directories?" ON )
2015-10-19 15:21:08 +02:00
set ( USE_OPENMP_DEFAULT OFF ) # Use of OpenMP is considered experimental
2019-03-06 11:54:21 +01:00
option ( BUILD_FLOW "Build the production oriented flow simulator?" ON )
2019-10-11 08:46:17 +02:00
option ( BUILD_FLOW_VARIANTS "Build the variants for flow by default?" OFF )
2020-11-10 08:54:44 +01:00
option ( BUILD_FLOW_POLY_GRID "Build flow blackoil with polyhedral grid" OFF )
2020-11-18 09:42:39 +01:00
option ( OPM_ENABLE_PYTHON "Enable python bindings?" OFF )
option ( OPM_ENABLE_PYTHON_TESTS "Enable tests for the python bindings?" ON )
2022-05-18 14:41:13 +02:00
option ( OPM_INSTALL_PYTHON "Install python bindings?" ON )
2021-10-25 14:57:46 +02:00
option ( USE_CHOW_PATEL_ILU "Use the iterative ILU by Chow and Patel?" OFF )
option ( USE_CHOW_PATEL_ILU_GPU "Run iterative ILU decomposition on GPU? Requires USE_CHOW_PATEL_ILU" OFF )
2022-02-02 12:06:40 +01:00
option ( USE_CHOW_PATEL_ILU_GPU_PARALLEL "Try to use more parallelism on the GPU during the iterative ILU decomposition? Requires USE_CHOW_PATEL_ILU_GPU" OFF )
2021-12-01 14:00:21 +01:00
option ( BUILD_FLOW_ALU_GRID "Build flow blackoil with alu grid" OFF )
2021-10-22 11:09:12 +02:00
option ( USE_DAMARIS_LIB "Use the Damaris library for asynchronous I/O?" OFF )
2023-08-09 15:39:32 +02:00
option ( USE_BDA_BRIDGE "Enable the BDA bridge (GPU/AMGCL solvers)" ON )
2023-08-15 14:35:25 +02:00
option ( USE_TRACY_PROFILER "Enable tracy profiling" OFF )
2020-01-13 15:46:50 +01:00
2022-05-18 14:41:13 +02:00
# The following was copied from CMakeLists.txt in opm-common.
# TODO: factor out the common parts in opm-common and opm-simulator as a cmake module
if ( OPM_ENABLE_PYTHON )
# We need to be compatible with older CMake versions
# that do not offer FindPython3
# e.g. Ubuntu LTS 18.04 uses cmake 3.10
if ( ${ CMAKE_VERSION } VERSION_LESS "3.12.0" )
find_package ( PythonInterp REQUIRED )
if ( PYTHON_VERSION_MAJOR LESS 3 )
message ( SEND_ERROR "OPM requires version 3 of Python but only version ${PYTHON_VERSION_STRING} was found" )
endif ()
set ( Python3_EXECUTABLE ${ PYTHON_EXECUTABLE } )
set ( Python3_LIBRARIES ${ PYTHON_LIBRARIES } )
2022-07-27 18:26:22 +02:00
set ( Python3_VERSION "${PYTHON_VERSION_STRING}" )
2022-06-07 08:29:33 +02:00
set ( Python3_VERSION_MINOR ${ PYTHON_VERSION_MINOR } )
2022-05-18 14:41:13 +02:00
else ()
# Be backwards compatible.
if ( PYTHON_EXECUTABLE AND NOT Python3_EXECUTABLE )
set ( Python3_EXECUTABLE ${ PYTHON_EXECUTABLE } )
endif ()
2023-05-02 09:18:57 +02:00
if ( ${ CMAKE_VERSION } VERSION_LESS "3.18.0" )
find_package ( Python3 REQUIRED COMPONENTS Interpreter Development )
else ()
find_package ( Python3 REQUIRED COMPONENTS Interpreter Development.Module )
endif ()
2022-05-18 14:41:13 +02:00
endif ()
2022-06-07 08:29:33 +02:00
if ( Python3_VERSION_MINOR LESS 3 )
# Python native namespace packages requires python >= 3.3
message ( SEND_ERROR "OPM requires python >= 3.3 but only version ${Python3_VERSION} was found" )
endif ()
2022-05-18 14:41:13 +02:00
# Compatibility settings for PythonInterp and PythonLibs
# used e.g. in FindCwrap, pybind11
set ( PYTHON_EXECUTABLE ${ Python3_EXECUTABLE } )
endif ()
2017-09-25 12:24:15 +02:00
if ( SIBLING_SEARCH AND NOT opm-common_DIR )
# guess the sibling dir
get_filename_component ( _leaf_dir_name ${ PROJECT_BINARY_DIR } NAME )
get_filename_component ( _parent_full_dir ${ PROJECT_BINARY_DIR } DIRECTORY )
get_filename_component ( _parent_dir_name ${ _parent_full_dir } NAME )
#Try if <module-name>/<build-dir> is used
get_filename_component ( _modules_dir ${ _parent_full_dir } DIRECTORY )
if ( IS_DIRECTORY ${ _modules_dir } /opm-common/ ${ _leaf_dir_name } )
set ( opm-common_DIR ${ _modules_dir } /opm-common/ ${ _leaf_dir_name } )
2017-09-15 11:34:22 +02:00
else ()
2017-09-25 12:24:15 +02:00
string ( REPLACE ${ PROJECT_NAME } opm-common _opm_common_leaf ${ _leaf_dir_name } )
if ( NOT _leaf_dir_name STREQUAL _opm_common_leaf
AND IS_DIRECTORY ${ _parent_full_dir } / ${ _opm_common_leaf } )
# We are using build directories named <prefix><module-name><postfix>
set ( opm-common_DIR ${ _parent_full_dir } / ${ _opm_common_leaf } )
elseif ( IS_DIRECTORY ${ _parent_full_dir } /opm-common )
# All modules are in a common build dir
2018-02-05 11:38:07 +01:00
set ( opm-common_DIR "${_parent_full_dir}/opm-common" )
2017-09-15 11:34:22 +02:00
endif ()
2017-09-25 12:24:15 +02:00
endif ()
2017-09-26 16:16:41 +02:00
endif ()
if ( opm-common_DIR AND NOT IS_DIRECTORY ${ opm-common_DIR } )
message ( WARNING "Value ${opm-common_DIR} passed to variable"
" opm-common_DIR is not a directory" )
2017-09-25 12:24:15 +02:00
endif ()
2015-03-18 14:26:29 +01:00
2017-09-25 12:24:15 +02:00
find_package ( opm-common REQUIRED )
2015-03-18 14:26:29 +01:00
2023-03-08 12:38:22 +01:00
include ( OpmInit )
OpmSetPolicies ()
2023-02-09 23:30:02 +01:00
if ( USE_MPI )
set ( HDF5_PREFER_PARALLEL TRUE )
endif ()
2023-08-09 15:39:32 +02:00
if ( USE_BDA_BRIDGE )
set ( COMPILE_BDA_BRIDGE 1 )
endif ()
2013-08-02 14:07:33 +02:00
# not the same location as most of the other projects? this hook overrides
macro ( dir_hook )
endmacro ( dir_hook )
2013-05-15 10:40:00 +02:00
2013-08-02 14:07:33 +02:00
# project information is in dune.module. Read this file and set variables.
# we cannot generate dune.module since it is read by dunecontrol before
# the build starts, so it makes sense to keep the data there then.
include ( OpmInit )
2013-05-15 10:40:00 +02:00
2018-03-12 15:37:21 +01:00
# Look for the opm-tests repository; if found the variable
# HAVE_OPM_TESTS will be set to true.
include ( Findopm-tests )
2015-10-21 17:35:44 +02:00
2013-08-02 14:07:33 +02:00
# list of prerequisites for this particular project; this is in a
# separate file (in cmake/Modules sub-directory) because it is shared
# with the find module
2015-05-15 15:43:03 +02:00
include ( "${project}-prereqs" )
2013-05-15 10:40:00 +02:00
2020-04-02 20:30:20 +02:00
# Make sure we are using the same compiler underneath
# NVCC as for the rest. In the case that NVCC does not support
# that compiler it will error out. Unfortunately this will only
2020-04-29 13:28:23 +02:00
# work for CMake >= 3.8. We found no way to make FindCUDA.cmake error
2020-04-02 20:30:20 +02:00
# out. It seems to ignore CMAKE_NVCC_FLAGS and CMAKE. Additionally
# our way of specifying cuda source files never worked for CMake
# version < 3.8. Hence we deactivate cuda for these versions.
# We use "CMAKE_VERSION VERSION_GREATER 3.7.9" instead of
# CMAKE_VERSION VERSION_GREATER_EQUAL 3.8, because of backwards
# compatibility to cmake 3.6 and lower.
if ( NOT CMAKE_DISABLE_FIND_PACKAGE_CUDA AND
CMAKE_VERSION VERSION_GREATER 3.7.9 )
2020-04-27 22:01:46 +02:00
if ( CMAKE_BUILD_TYPE )
set ( _flags_suffix "_${CMAKE_BUILD_TYPE}" )
endif ()
2020-04-29 13:27:04 +02:00
if ( NOT DEFINED ENV{CUDAHOSTCXX} AND NOT DEFINED CMAKE_CUDA_HOST_COMPILER AND
2020-04-27 22:01:46 +02:00
( NOT CMAKE_CUDA_FLAGS ${ _flags_suffix } OR NOT CMAKE_CUDA_FLAGS ${ _flags_suffix } MATCHES ".*-ccbin .*" ))
2020-04-29 13:27:04 +02:00
message ( STATUS "Setting CUDA host compiler CMAKE_CUDA_HOST_COMPILER to ${CMAKE_CXX_COMPILER} to "
2020-04-27 14:54:08 +02:00
"prevent incompatibilities. Note that this might report that there "
"is not CUDA compiler if your system's CUDA compiler does not support "
"${CMAKE_CXX_COMPILER}." )
2020-04-29 13:28:23 +02:00
# check_language does not seem to care about ${CMAKE_CUDA_FLAGS} or $(CUDA_NVCC_FLAGS}.
# Hence we set CMAKE_CUDA_HOST_COMPILER to our C++ compiler.
# In check_language(CUDA) we will get an error if we in addition put
# "-ccbin ${CMAKE_CXX_COMPILER}" into CMAKE_CUDA_FLAGS. It results
2020-04-27 21:52:41 +02:00
# in "${NVCC} -ccbin=${CMAKE_CXX_COMPILER} -ccbin ${CMAKE_CXX_COMPILER}"
2020-04-29 13:28:23 +02:00
# which causes nvcc to abort
2020-04-29 13:27:04 +02:00
set ( CMAKE_CUDA_HOST_COMPILER ${ CMAKE_CXX_COMPILER } )
2020-04-29 13:58:48 +02:00
set ( ENV{CUDAHOSTCXX} ${ CMAKE_CUDA_HOST_COMPILER } ) # The only thing honored by check_language(CUDA)!
2020-04-02 20:30:20 +02:00
endif ()
include ( CheckLanguage )
check_language ( CUDA )
if ( CMAKE_CUDA_COMPILER )
2020-04-29 13:28:23 +02:00
# OPTIONAL is ignored. Hence the magic above to check whether enabling CUDA works
2020-04-02 20:30:20 +02:00
enable_language ( CUDA OPTIONAL )
2020-04-27 14:54:08 +02:00
# While the documentation says that it is deprecated, FindCUDA seems the
# only easy way to determine the cublas and cusparse libraries.
# Hence we call it unconditionally
# The WellContributions kernel uses __shfl_down_sync, which was introduced in CUDA 9.0
find_package ( CUDA )
2020-04-02 20:30:20 +02:00
endif ()
2020-04-15 14:21:36 +02:00
if ( CUDA_FOUND AND CUDA_VERSION VERSION_LESS "9.0" )
2020-04-02 20:30:20 +02:00
set ( CUDA_FOUND OFF )
message ( WARNING "Deactivating CUDA as we require version 9.0 or newer."
" Found only CUDA version ${CUDA_VERSION}." )
endif ()
endif ()
if ( CUDA_FOUND )
set ( HAVE_CUDA 1 )
include_directories ( ${ CUDA_INCLUDE_DIRS } )
endif ()
2020-06-22 18:26:49 +02:00
find_package ( OpenCL )
if ( OpenCL_FOUND )
2021-10-28 16:18:07 +02:00
# the current OpenCL implementation relies on cl2.hpp, not cl.hpp
2020-06-25 18:44:49 +02:00
# make sure it is available, otherwise disable OpenCL
2021-10-28 16:18:07 +02:00
find_file ( CL2_HPP CL/cl2.hpp HINTS ${ OpenCL_INCLUDE_DIRS } )
if ( CL2_HPP )
2020-06-25 18:44:49 +02:00
set ( HAVE_OPENCL 1 )
include_directories ( ${ OpenCL_INCLUDE_DIRS } )
2021-11-01 13:45:21 +01:00
find_file ( OPENCL_HPP CL/opencl.hpp HINTS ${ OpenCL_INCLUDE_DIRS } )
if ( OPENCL_HPP )
set ( HAVE_OPENCL_HPP 1 )
endif ()
2020-06-25 18:44:49 +02:00
else ()
2021-10-28 16:18:07 +02:00
message ( WARNING " OpenCL was found, but this version of opm-simulators relies on CL/cl2.hpp, which implements OpenCL 1.0, 1.1 and 1.2.\n Deactivating OpenCL" )
2020-06-25 18:44:49 +02:00
set ( OpenCL_FOUND OFF )
2020-07-28 11:49:01 +02:00
set ( OPENCL_FOUND OFF )
2020-06-25 18:44:49 +02:00
endif ()
2021-10-25 14:57:46 +02:00
if ( USE_CHOW_PATEL_ILU )
add_compile_options ( -DCHOW_PATEL=1 )
if ( USE_CHOW_PATEL_ILU_GPU )
add_compile_options ( -DCHOW_PATEL_GPU=1 )
if ( USE_CHOW_PATEL_ILU_GPU_PARALLEL )
add_compile_options ( -DCHOW_PATEL_GPU_PARALLEL=1 )
else ()
add_compile_options ( -DCHOW_PATEL_GPU_PARALLEL=0 )
endif ()
else ()
add_compile_options ( -DCHOW_PATEL_GPU=0 )
add_compile_options ( -DCHOW_PATEL_GPU_PARALLEL=0 )
endif ()
endif ()
else ()
if ( USE_CHOW_PATEL_ILU )
message ( FATAL_ERROR " CHOW_PATEL_ILU only works for openclSolver, but OpenCL was not found" )
endif ()
2020-06-22 18:26:49 +02:00
endif ()
2021-06-18 11:46:00 +02:00
find_package ( amgcl )
if ( amgcl_FOUND )
2021-06-02 16:19:00 +02:00
set ( HAVE_AMGCL 1 )
2021-06-18 19:40:46 +02:00
# Linking to target angcl::amgcl drags in OpenMP and -fopenmp as a compile
# flag. With that nvcc fails as it does not that flag.
2021-06-21 11:13:34 +02:00
# Hence we set AMGCL_INCLUDE_DIRS.
2021-06-18 19:40:46 +02:00
get_property ( AMGCL_INCLUDE_DIRS TARGET amgcl::amgcl PROPERTY INTERFACE_INCLUDE_DIRECTORIES )
2021-06-30 16:41:35 +02:00
include_directories ( SYSTEM ${ AMGCL_INCLUDE_DIRS } )
2021-06-02 16:19:00 +02:00
endif ()
2021-06-30 16:03:14 +02:00
if ( OpenCL_FOUND )
find_package ( VexCL )
if ( VexCL_FOUND )
set ( HAVE_VEXCL 1 )
# generator expressions in vexcl do not seem to work and therefore
# we cannot use the imported target. Hence we exract the needed info
# from the targets
get_property ( VEXCL_INCLUDE_DIRS TARGET VexCL::Common PROPERTY INTERFACE_INCLUDE_DIRECTORIES )
get_property ( VEXCL_LINK_LIBRARIES TARGET VexCL::Common PROPERTY INTERFACE_LINK_LIBRARIES )
get_property ( VEXCL_COMPILE_DEFINITIONS TARGET VexCL::OpenCL PROPERTY INTERFACE_COMPILE_DEFINITIONS )
set ( VEXCL_LINK_LIBRARIES "${VEXCL_LINK_LIBRARIES};OpenCL::OpenCL" )
add_library ( OPM::VexCL::OpenCL INTERFACE IMPORTED )
set_target_properties ( OPM::VexCL::OpenCL PROPERTIES
INTERFACE_COMPILE_DEFINITIONS "${VEXCL_COMPILE_DEFINITIONS}"
INTERFACE_LINK_LIBRARIES "${VEXCL_LINK_LIBRARIES}" )
2021-06-30 16:41:35 +02:00
target_include_directories ( OPM::VexCL::OpenCL SYSTEM INTERFACE "${VEXCL_INCLUDE_DIRS}" )
2021-06-30 16:03:14 +02:00
endif ()
endif ()
2022-10-18 13:59:00 +02:00
2013-08-02 14:07:33 +02:00
macro ( config_hook )
2019-06-13 14:59:31 +02:00
opm_need_version_of ( "dune-common" )
opm_need_version_of ( "dune-istl" )
2019-10-22 12:49:06 +02:00
if ( dune-fem_FOUND )
opm_need_version_of ( "dune-fem" )
endif ()
2019-08-23 08:34:32 +02:00
opm_need_version_of ( "opm-models" )
2020-09-28 11:01:13 +02:00
2021-03-11 20:03:00 +01:00
if ( NOT fmt_FOUND )
2023-11-21 15:10:26 +01:00
include ( DownloadFmt )
2021-03-11 20:03:00 +01:00
endif ()
2023-08-15 14:35:25 +02:00
if ( USE_TRACY_PROFILER AND Tracy_FOUND )
set ( USE_TRACY 1 )
list ( APPEND opm-simulators_LIBRARIES Tracy::TracyClient )
else ()
set ( USE_TRACY )
endif ()
2020-09-28 11:01:13 +02:00
include_directories ( ${ EXTRA_INCLUDES } )
2022-10-12 11:19:00 +02:00
include ( UseDamaris )
2023-04-06 10:04:44 +02:00
endmacro ( config_hook )
macro ( prereqs_hook )
endmacro ( prereqs_hook )
macro ( sources_hook )
if ( OPENCL_FOUND )
include ( opencl-source-provider )
list ( APPEND opm-simulators_SOURCES ${ PROJECT_BINARY_DIR } /clSources.cpp )
endif ()
endmacro ( sources_hook )
macro ( fortran_hook )
endmacro ( fortran_hook )
2023-03-16 13:39:07 +01:00
2023-04-06 10:04:44 +02:00
macro ( files_hook )
2023-03-16 13:39:07 +01:00
if ( hip_FOUND )
get_filename_component ( CXX_COMPILER ${ CMAKE_CXX_COMPILER } NAME )
if ( hip_VERSION VERSION_LESS "5.3" )
2023-03-30 15:28:26 +02:00
if ( ROCALUTION_FOUND AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
message ( WARNING " Cannot use hipcc/clang for rocalution with rocm < 5.3\n Disabling rocalutionSolver" )
unset ( ROCALUTION_FOUND )
unset ( HAVE_ROCALUTION )
2023-03-16 13:39:07 +01:00
endif ()
2023-10-02 14:14:43 +02:00
endif ()
if ( rocsparse_FOUND AND rocblas_FOUND )
set ( HAVE_ROCSPARSE 1 )
2023-03-16 13:39:07 +01:00
else ()
2023-10-02 14:14:43 +02:00
unset ( HAVE_ROCSPARSE )
2023-03-30 15:28:26 +02:00
endif ()
if ( ROCALUTION_FOUND )
set ( HAVE_ROCALUTION 1 )
2023-03-16 13:39:07 +01:00
endif ()
endif ()
2023-02-22 10:43:25 +01:00
if ( MPI_FOUND AND HDF5_FOUND AND NOT HDF5_IS_PARALLEL )
message ( WARNING "When building parallel OPM flow we need a "
"parallel version of hdf5, but found only a serial one. "
"Please install a parallel hdf5 library for MPI "
"(e.g with apt-get install libhdf5-mpi-dev) and do a clean "
"rebuild (build after \" make clean\ "). Continuing with "
"only normal restart without hdf5 file support." )
set ( HDF5_FOUND OFF )
unset ( HAVE_HDF5 )
endif ()
2023-10-08 08:57:37 +02:00
if ( HAVE_ROCSPARSE AND HAVE_CUDA )
2023-10-11 13:29:40 +02:00
message ( WARNING "WARNING! Using CUDA and ROCm at the same time is not allowed. Please choose only one of them by setting CMAKE_DISABLE_FIND_PACKAGE_<rocsparse|CUDA>=<ON|OFF>. Disabling CUDA...\n" )
2023-10-08 08:57:37 +02:00
set ( CUDA_FOUND OFF )
unset ( HAVE_CUDA )
endif ()
2023-02-22 10:43:25 +01:00
# read the list of components from this file (in the project directory);
# it should set various lists with the names of the files to include
# include needs to be here to make reset HDF5_FOUND available in
# (CMakeLists_files.cmake and because we need the created lists during
# then inclusion of OpmLibMain
include ( CMakeLists_files.cmake )
2014-06-16 14:40:52 +02:00
endmacro ( files_hook )
2013-08-02 14:07:33 +02:00
macro ( tests_hook )
endmacro ( tests_hook )
2023-08-01 13:41:51 +02:00
2013-08-02 14:07:33 +02:00
# all setup common to the OPM library modules is done here
include ( OpmLibMain )
2013-05-15 10:40:00 +02:00
2023-07-03 09:05:45 +02:00
opm_add_test ( test_tuning_xxxMBE
SOURCES
tests/test_tuning_XXXMBE.cpp
LIBRARIES
${ Boost_UNIT_TEST_FRAMEWORK_LIBRARY }
2023-08-25 13:59:11 +02:00
ONLY_COMPILE )
opm_add_test ( test_tuning_tsinit_nextstep
SOURCES
tests/test_tuning_TSINIT_NEXTSTEP.cpp
LIBRARIES
${ Boost_UNIT_TEST_FRAMEWORK_LIBRARY } opmcommon
2023-07-03 09:05:45 +02:00
ONLY_COMPILE )
2018-03-12 15:37:21 +01:00
if ( HAVE_OPM_TESTS )
2016-11-21 18:02:21 +01:00
include ( ${ CMAKE_CURRENT_SOURCE_DIR } /compareECLFiles.cmake )
2017-03-03 15:08:12 +01:00
endif ()
2018-09-19 11:45:40 +02:00
2023-12-19 10:34:59 +01:00
target_sources ( test_outputdir PRIVATE $< TARGET_OBJECTS:moduleVersion > )
2023-12-15 12:18:34 +01:00
target_sources ( test_equil PRIVATE $< TARGET_OBJECTS:moduleVersion > )
target_sources ( test_RestartSerialization PRIVATE $< TARGET_OBJECTS:moduleVersion > )
target_sources ( test_glift1 PRIVATE $< TARGET_OBJECTS:moduleVersion > )
2023-12-19 10:34:59 +01:00
2018-11-13 10:28:05 +01:00
opm_set_test_driver ( ${ CMAKE_CURRENT_SOURCE_DIR } /tests/run-parallel-unitTest.sh "" )
opm_add_test ( test_gatherconvergencereport
DEPENDS "opmsimulators"
LIBRARIES opmsimulators ${ Boost_UNIT_TEST_FRAMEWORK_LIBRARY }
SOURCES
tests/test_gatherconvergencereport.cpp
CONDITION
2020-02-19 12:28:55 +01:00
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
2018-11-13 10:28:05 +01:00
DRIVER_ARGS
2021-10-13 10:47:23 +02:00
-n 4
-b ${ PROJECT_BINARY_DIR }
2023-06-27 18:50:10 +02:00
PROCESSORS
4
2018-11-13 10:28:05 +01:00
)
2019-01-11 13:53:18 +01:00
opm_add_test ( test_gatherdeferredlogger
DEPENDS "opmsimulators"
LIBRARIES opmsimulators ${ Boost_UNIT_TEST_FRAMEWORK_LIBRARY }
SOURCES
tests/test_gatherdeferredlogger.cpp
CONDITION
2020-02-19 12:28:55 +01:00
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
2019-01-11 13:53:18 +01:00
DRIVER_ARGS
2021-10-13 10:47:23 +02:00
-n 4
-b ${ PROJECT_BINARY_DIR }
2023-06-27 18:50:10 +02:00
PROCESSORS
4
2019-01-11 13:53:18 +01:00
)
2020-12-09 15:37:03 +01:00
opm_add_test ( test_parallelwellinfo_mpi
2021-04-30 17:00:20 +02:00
EXE_NAME
test_parallelwellinfo
2020-12-09 15:37:03 +01:00
CONDITION
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
2021-10-13 10:47:23 +02:00
-n 4
-b ${ PROJECT_BINARY_DIR }
2021-04-30 17:00:20 +02:00
NO_COMPILE
2023-06-27 18:50:10 +02:00
PROCESSORS
4
2020-12-09 15:37:03 +01:00
)
2023-06-06 18:45:10 +02:00
opm_add_test ( test_parallel_wbp_sourcevalues_np2
EXE_NAME
test_parallel_wbp_sourcevalues
CONDITION
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
-n 2
-b ${ PROJECT_BINARY_DIR }
NO_COMPILE
PROCESSORS
2
)
opm_add_test ( test_parallel_wbp_sourcevalues_np3
EXE_NAME
test_parallel_wbp_sourcevalues
CONDITION
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
-n 3
-b ${ PROJECT_BINARY_DIR }
NO_COMPILE
PROCESSORS
3
)
opm_add_test ( test_parallel_wbp_sourcevalues_np4
EXE_NAME
test_parallel_wbp_sourcevalues
CONDITION
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
-n 4
-b ${ PROJECT_BINARY_DIR }
NO_COMPILE
PROCESSORS
4
)
2023-06-06 21:03:48 +02:00
opm_add_test ( test_parallel_wbp_calculation
SOURCES
tests/test_parallel_wbp_calculation.cpp
LIBRARIES
opmsimulators ${ Boost_UNIT_TEST_FRAMEWORK_LIBRARY }
CONDITION
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
ONLY_COMPILE
)
opm_add_test ( test_parallel_wbp_calculation_create
EXE_NAME
test_parallel_wbp_calculation
CONDITION
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
-n 2
-b ${ PROJECT_BINARY_DIR }
TEST_ARGS
--run_test=Create
NO_COMPILE
PROCESSORS
2
)
opm_add_test ( test_parallel_wbp_calculation_well_openconns
EXE_NAME
test_parallel_wbp_calculation
CONDITION
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
-n 2
-b ${ PROJECT_BINARY_DIR }
TEST_ARGS
--run_test=TopOfFormation_Well_OpenConns
NO_COMPILE
PROCESSORS
2
)
2024-02-28 10:52:03 +01:00
opm_add_test ( test_parallel_region_phase_pvaverage_np2
EXE_NAME
test_region_phase_pvaverage
CONDITION
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
-n 2
-b ${ PROJECT_BINARY_DIR }
TEST_ARGS
--run_test=Parallel/*
NO_COMPILE
PROCESSORS
2
)
opm_add_test ( test_parallel_region_phase_pvaverage_np3
EXE_NAME
test_region_phase_pvaverage
CONDITION
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
-n 3
-b ${ PROJECT_BINARY_DIR }
TEST_ARGS
--run_test=Parallel/*
NO_COMPILE
PROCESSORS
3
)
opm_add_test ( test_parallel_region_phase_pvaverage_np4
EXE_NAME
test_region_phase_pvaverage
CONDITION
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
-n 4
-b ${ PROJECT_BINARY_DIR }
TEST_ARGS
--run_test=Parallel/*
NO_COMPILE
PROCESSORS
4
)
2021-11-09 11:48:06 +01:00
opm_add_test ( test_broadcast
DEPENDS "opmsimulators"
LIBRARIES opmsimulators ${ Boost_UNIT_TEST_FRAMEWORK_LIBRARY }
SOURCES
tests/test_broadcast.cpp
CONDITION
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
-n 4
-b ${ PROJECT_BINARY_DIR }
2023-06-27 18:50:10 +02:00
PROCESSORS
4
2021-11-09 11:48:06 +01:00
)
2023-02-09 23:30:02 +01:00
opm_add_test ( test_HDF5File_Parallel
DEPENDS "opmsimulators"
LIBRARIES opmsimulators ${ Boost_UNIT_TEST_FRAMEWORK_LIBRARY }
SOURCES
tests/test_HDF5File_Parallel.cpp
CONDITION
HDF5_FOUND AND MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
-n 4
-b ${ PROJECT_BINARY_DIR }
2023-06-27 18:50:10 +02:00
PROCESSORS
4
2023-02-09 23:30:02 +01:00
)
opm_add_test ( test_HDF5Serializer_Parallel
DEPENDS "opmsimulators"
LIBRARIES opmsimulators ${ Boost_UNIT_TEST_FRAMEWORK_LIBRARY }
SOURCES
tests/test_HDF5Serializer_Parallel.cpp
CONDITION
HDF5_FOUND AND MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
-n 4
-b ${ PROJECT_BINARY_DIR }
2023-06-27 18:50:10 +02:00
PROCESSORS
4
2023-02-09 23:30:02 +01:00
)
2023-12-11 09:16:54 +01:00
opm_add_test ( test_rstconv_parallel
EXE_NAME
test_rstconv
CONDITION
MPI_FOUND AND Boost_UNIT_TEST_FRAMEWORK_FOUND
DRIVER_ARGS
-n 4
-b ${ PROJECT_BINARY_DIR }
NO_COMPILE
PROCESSORS
4
)
2019-03-06 11:54:21 +01:00
include ( OpmBashCompletion )
2019-01-11 13:53:18 +01:00
2019-03-07 12:45:15 +01:00
if ( NOT BUILD_FLOW )
set ( FLOW_DEFAULT_ENABLE_IF "FALSE" )
else ()
set ( FLOW_DEFAULT_ENABLE_IF "TRUE" )
endif ()
2021-08-17 08:52:16 +02:00
if ( NOT BUILD_FLOW_VARIANTS )
set ( FLOW_VARIANTS_DEFAULT_ENABLE_IF "FALSE" )
else ()
set ( FLOW_VARIANTS_DEFAULT_ENABLE_IF "TRUE" )
endif ()
if ( NOT BUILD_FLOW_POLY_GRID )
set ( FLOW_POLY_ONLY_DEFAULT_ENABLE_IF "FALSE" )
else ()
set ( FLOW_POLY_ONLY_DEFAULT_ENABLE_IF "TRUE" )
endif ()
2020-06-08 10:06:39 +02:00
add_library ( moduleVersion OBJECT opm/simulators/utils/moduleVersion.cpp )
2020-09-25 11:06:31 +02:00
set_property ( TARGET moduleVersion PROPERTY POSITION_INDEPENDENT_CODE ON )
2020-06-08 10:06:39 +02:00
2020-06-09 15:08:30 +02:00
# Strictly we only depend on the update-version target,
# but this is not exposed in a super-build.
add_dependencies ( moduleVersion opmsimulators )
2021-11-01 09:03:27 +01:00
set ( FLOW_MODELS blackoil brine energy extbo foam gasoil gaswater
2021-12-08 14:35:22 +01:00
oilwater oilwater_brine gaswater_brine oilwater_polymer
2023-05-02 15:41:07 +02:00
oilwater_polymer_injectivity micp polymer solvent solvent_foam
2022-09-30 15:28:58 +02:00
gasoil_energy brine_saltprecipitation
2023-05-04 10:25:58 +02:00
gaswater_saltprec_vapwat gaswater_saltprec_energy brine_precsalt_vapwat
2022-11-24 14:32:41 +01:00
blackoil_legacyassembly gasoildiffuse gaswater_dissolution
2023-03-29 08:21:54 +02:00
gaswater_dissolution_diffuse gaswater_energy gaswater_solvent )
2022-09-30 15:28:58 +02:00
set ( FLOW_VARIANT_MODELS brine_energy onephase onephase_energy )
2020-11-18 13:00:32 +01:00
2020-10-23 11:53:50 +02:00
set ( FLOW_TGTS )
2021-11-01 08:33:17 +01:00
foreach ( OBJ ${ COMMON_MODELS } ${ FLOW_MODELS } ${ FLOW_VARIANT_MODELS } )
2024-02-01 13:39:45 +01:00
add_library ( flow_lib ${ OBJ } OBJECT flow/flow_ ${ OBJ } .cpp )
2020-10-23 11:53:50 +02:00
list ( APPEND FLOW_TGTS $< TARGET_OBJECTS:flow_lib${OBJ} > )
2021-04-09 11:31:16 +02:00
if ( TARGET fmt::fmt )
target_link_libraries ( flow_lib ${ OBJ } fmt::fmt )
endif ()
2023-11-22 12:27:31 +01:00
if ( TARGET opmcommon )
2023-06-30 14:58:31 +02:00
add_dependencies ( flow_lib ${ OBJ } opmcommon )
endif ()
2021-11-01 08:33:17 +01:00
opm_add_test ( flow_ ${ OBJ }
ONLY_COMPILE
SOURCES
2024-02-01 11:05:17 +01:00
flow/flow_ ${ OBJ } _main.cpp
2021-11-01 08:33:17 +01:00
$< TARGET_OBJECTS:moduleVersion >
$< TARGET_OBJECTS:flow_lib${OBJ} >
EXE_NAME flow_ ${ OBJ }
DEPENDS opmsimulators
LIBRARIES opmsimulators )
2020-10-23 11:53:50 +02:00
endforeach ()
2020-09-25 11:06:31 +02:00
set_property ( TARGET flow_libblackoil PROPERTY POSITION_INDEPENDENT_CODE ON )
2021-11-01 08:33:17 +01:00
foreach ( OBJ ${ FLOW_VARIANT_MODELS } )
2021-10-18 12:34:09 +02:00
set_property ( TARGET flow_lib ${ OBJ } PROPERTY EXCLUDE_FROM_ALL ${ FLOW_VARIANTS_DEFAULT_ENABLE_IF } )
endforeach ()
2021-08-16 12:40:41 +02:00
2018-09-20 10:58:27 +02:00
opm_add_test ( flow
ONLY_COMPILE
ALWAYS_ENABLE
2019-03-07 12:45:15 +01:00
DEFAULT_ENABLE_IF ${ FLOW_DEFAULT_ENABLE_IF }
2020-06-08 10:06:39 +02:00
DEPENDS opmsimulators
LIBRARIES opmsimulators
2018-09-20 10:58:27 +02:00
SOURCES
2019-03-07 12:45:15 +01:00
flow/flow.cpp
2020-10-23 11:53:50 +02:00
${ FLOW_TGTS }
2020-09-25 11:06:31 +02:00
$< TARGET_OBJECTS:moduleVersion >
)
2020-06-08 10:06:39 +02:00
2023-08-01 13:41:51 +02:00
opm_add_test ( flow_blackoil_polyhedralgrid
2020-11-10 08:54:44 +01:00
ONLY_COMPILE
ALWAYS_ENABLE
DEFAULT_ENABLE_IF ${ FLOW_POLY_ONLY_DEFAULT_ENABLE_IF }
DEPENDS opmsimulators
LIBRARIES opmsimulators
SOURCES
2023-08-01 13:41:51 +02:00
flow/flow_blackoil_polyhedralgrid.cpp
2020-11-10 08:54:44 +01:00
$< TARGET_OBJECTS:moduleVersion > )
2021-01-26 21:17:32 +01:00
opm_add_test ( flow_distribute_z
ONLY_COMPILE
ALWAYS_ENABLE
DEFAULT_ENABLE_IF ${ FLOW_DEFAULT_ENABLE_IF }
DEPENDS opmsimulators
LIBRARIES opmsimulators
SOURCES
flow/flow_distribute_z.cpp
${ FLOW_TGTS }
$< TARGET_OBJECTS:moduleVersion >
)
2021-12-01 14:00:21 +01:00
2022-11-15 13:52:02 +01:00
if ( dune-alugrid_FOUND )
if ( NOT BUILD_FLOW_ALU_GRID )
set ( FLOW_ALUGRID_ONLY_DEFAULT_ENABLE_IF "FALSE" )
else ()
set ( FLOW_ALUGRID_ONLY_DEFAULT_ENABLE_IF "TRUE" )
endif ()
2023-08-01 13:41:51 +02:00
opm_add_test ( flow_blackoil_alugrid
2022-11-15 13:52:02 +01:00
ONLY_COMPILE
ALWAYS_ENABLE
DEFAULT_ENABLE_IF ${ FLOW_ALUGRID_ONLY_DEFAULT_ENABLE_IF }
DEPENDS opmsimulators
LIBRARIES opmsimulators
SOURCES
flow/flow_blackoil_alugrid.cpp
$< TARGET_OBJECTS:moduleVersion > )
endif ()
2020-11-10 08:54:44 +01:00
2019-03-07 12:45:15 +01:00
if ( BUILD_FLOW )
install ( TARGETS flow DESTINATION bin )
opm_add_bash_completion ( flow )
add_test ( NAME flow__version
COMMAND flow --version )
set_tests_properties ( flow__version PROPERTIES
PASS_REGULAR_EXPRESSION "${${project}_LABEL}" )
2019-03-06 11:54:21 +01:00
endif ()
2018-12-09 21:15:59 +01:00
2019-10-31 16:41:13 +01:00
if ( OPM_ENABLE_PYTHON )
add_subdirectory ( python )
endif ()
2020-01-09 09:32:24 +01:00
2020-04-03 10:15:49 +02:00
add_custom_target ( extra_test ${ CMAKE_CTEST_COMMAND } -C ExtraTests )
2020-12-22 12:57:01 +01:00
# must link libraries after target 'opmsimulators' has been defined
2020-01-09 09:32:24 +01:00
if ( CUDA_FOUND )
2020-02-25 16:54:53 +01:00
target_link_libraries ( opmsimulators PUBLIC ${ CUDA_cusparse_LIBRARY } )
target_link_libraries ( opmsimulators PUBLIC ${ CUDA_cublas_LIBRARY } )
2023-08-09 15:39:32 +02:00
if ( USE_BDA_BRIDGE )
set_tests_properties ( cusparseSolver PROPERTIES LABELS gpu_cuda )
endif ()
2023-05-09 15:49:00 +02:00
# CUISTL
2023-05-09 16:00:57 +02:00
set_tests_properties ( cusparse_safe_call
cublas_safe_call
cuda_safe_call
cuda_check_last_error
cublas_handle
2023-10-16 11:31:00 +02:00
cujac
2023-05-09 16:00:57 +02:00
cusparse_handle
2023-10-16 11:31:00 +02:00
cuSparse_matrix_operations
cuVector_operations
2023-05-09 16:25:43 +02:00
cuvector
cusparsematrix
2023-05-09 16:32:57 +02:00
cuseqilu0
2023-05-31 14:51:00 +02:00
cuowneroverlapcopy
solver_adapter
2023-05-09 16:00:57 +02:00
PROPERTIES LABELS gpu_cuda )
2020-01-09 09:32:24 +01:00
endif ()
2023-08-09 15:39:32 +02:00
if ( USE_BDA_BRIDGE )
if ( OpenCL_FOUND )
target_link_libraries ( opmsimulators PUBLIC ${ OpenCL_LIBRARIES } )
set_tests_properties ( openclSolver solvetransposed3x3 csrToCscOffsetMap
PROPERTIES LABELS gpu_opencl )
endif ()
2020-12-22 12:57:01 +01:00
2023-08-09 15:39:32 +02:00
if ( ROCALUTION_FOUND )
target_include_directories ( opmsimulators PUBLIC ${ rocalution_INCLUDE_DIR } /rocalution )
set_tests_properties ( rocalutionSolver PROPERTIES LABELS gpu_rocm )
endif ()
2022-10-18 13:59:00 +02:00
2023-08-09 15:39:32 +02:00
if ( rocsparse_FOUND AND rocblas_FOUND )
target_link_libraries ( opmsimulators PUBLIC roc::rocsparse )
target_link_libraries ( opmsimulators PUBLIC roc::rocblas )
set_tests_properties ( rocsparseSolver PROPERTIES LABELS gpu_rocm )
endif ()
2023-01-18 10:11:42 +01:00
2023-08-09 15:39:32 +02:00
if ( VexCL_FOUND )
target_link_libraries ( opmsimulators PUBLIC OPM::VexCL::OpenCL )
endif ()
2021-06-30 16:03:14 +02:00
endif ()
2022-11-17 09:27:00 +01:00
2022-10-12 11:19:00 +02:00
if ( Damaris_FOUND )
target_link_libraries ( opmsimulators PUBLIC damaris )
2021-10-22 11:09:12 +02:00
endif ()
2021-04-21 13:08:14 +02:00
install ( DIRECTORY doc/man1 DESTINATION ${ CMAKE_INSTALL_MANDIR }
FILES_MATCHING PATTERN "*.1" )