From 0429ccc63ee17f17d4d86bf493076b4744219573 Mon Sep 17 00:00:00 2001 From: Marc Henry de Frahan Date: Wed, 29 Oct 2025 13:09:39 -0600 Subject: [PATCH 1/7] Fix fftw finding --- CMakeLists.txt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a255ffb..563cadf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,8 @@ project( Waves2AMR message(STATUS "CMake version: ${CMAKE_VERSION}") +list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") + # # Check if CMAKE_BUILD_TYPE is given. If not, use default # @@ -52,10 +54,6 @@ if (WAVES2AMR_GPU_BACKEND STREQUAL "CUDA") include(AMReXTargetHelpers) endif () -# FFTW library is required -include_directories(${FFTW_DIR}/include/) -set(fftw_lib ${FFTW_DIR}/lib/libfftw3.a) - # # Define the object library to compile # @@ -65,7 +63,10 @@ if (BUILD_SHARED_LIBS) endif() # Link required libraries target_link_libraries(waves_2_amr PUBLIC AMReX::amrex) -target_link_libraries(waves_2_amr PRIVATE ${fftw_lib}) + +find_package(FFTW REQUIRED) +target_link_libraries_system(waves_2_amr PUBLIC FFTW::FFTW) + add_subdirectory(src) add_subdirectory(include) From 0b28da9adc2aa99f7ab59b172a81c564bf7fa04a Mon Sep 17 00:00:00 2001 From: Marc Henry de Frahan Date: Wed, 29 Oct 2025 13:09:47 -0600 Subject: [PATCH 2/7] add finder --- cmake/FindFFTW.cmake | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 cmake/FindFFTW.cmake diff --git a/cmake/FindFFTW.cmake b/cmake/FindFFTW.cmake new file mode 100644 index 0000000..b23952a --- /dev/null +++ b/cmake/FindFFTW.cmake @@ -0,0 +1,53 @@ +# - Find the FFTW3 library +# This will define the following imported target: +# +# FFTW::FFTW - The FFTW library target +# +# and the following variables (for legacy support): +# +# FFTW_FOUND - True if FFTW was found +# FFTW_INCLUDE_DIRS - Include directories for FFTW +# FFTW_LIBRARIES - Libraries to link against + +# Look for header +find_path( + FFTW_INCLUDE_DIR + NAMES fftw3.h + PATHS + ${FFTW_ROOT} + /usr/include + /usr/local/include +) + +# Look for library (shared or static) +find_library( + FFTW_LIBRARY + NAMES fftw3 libfftw3 + PATHS + ${FFTW_ROOT} + /usr/lib + /usr/local/lib + /usr/lib/x86_64-linux-gnu +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + FFTW + REQUIRED_VARS FFTW_LIBRARY FFTW_INCLUDE_DIR + VERSION_VAR FFTW_VERSION +) + +if(FFTW_FOUND) + set(FFTW_LIBRARIES ${FFTW_LIBRARY}) + set(FFTW_INCLUDE_DIRS ${FFTW_INCLUDE_DIR}) + + if(NOT TARGET FFTW::FFTW) + add_library(FFTW::FFTW UNKNOWN IMPORTED) + set_target_properties(FFTW::FFTW PROPERTIES + IMPORTED_LOCATION "${FFTW_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIR}" + ) + endif() +endif() + +mark_as_advanced(FFTW_INCLUDE_DIR FFTW_LIBRARY) From f891b21719a95da1d2ebbd24fa62d71bbba946eb Mon Sep 17 00:00:00 2001 From: Marc Henry de Frahan Date: Wed, 29 Oct 2025 13:20:29 -0600 Subject: [PATCH 3/7] remove unused --- src/interp_to_mfab.cpp | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/interp_to_mfab.cpp b/src/interp_to_mfab.cpp index 1341eec..ba1d2ff 100644 --- a/src/interp_to_mfab.cpp +++ b/src/interp_to_mfab.cpp @@ -454,8 +454,6 @@ void interp_to_mfab::interp_velocity_to_field( // Number of levels const int nlevels = vfield.size(); - // Number of heights relevant to this processor - const int nhts = indvec.size(); // Copy hvec and indvec to device amrex::Gpu::DeviceVector indvec_dvc(indvec.size()); amrex::Gpu::copy( @@ -464,12 +462,6 @@ void interp_to_mfab::interp_velocity_to_field( amrex::Gpu::DeviceVector hvec_dvc(hvec.size()); amrex::Gpu::copy( amrex::Gpu::hostToDevice, hvec.begin(), hvec.end(), hvec_dvc.begin()); - // Get pointers to device vectors - const auto* indvec_ptr = indvec_dvc.data(); - const auto* hvec_ptr = hvec_dvc.data(); - const auto* uvec_ptr = uvec.data(); - const auto* vvec_ptr = vvec.data(); - const auto* wvec_ptr = wvec.data(); // Loop through cells and perform interpolation for (int nl = 0; nl < nlevels; ++nl) { @@ -506,8 +498,6 @@ void interp_to_mfab::interp_velocity_to_field( // Number of levels const int nlevels = vfield.size(); - // Number of heights relevant to this processor - const int nhts = indvec.size(); // Copy hvec and indvec to device amrex::Gpu::DeviceVector indvec_dvc(indvec.size()); amrex::Gpu::copy( @@ -516,12 +506,6 @@ void interp_to_mfab::interp_velocity_to_field( amrex::Gpu::DeviceVector hvec_dvc(hvec.size()); amrex::Gpu::copy( amrex::Gpu::hostToDevice, hvec.begin(), hvec.end(), hvec_dvc.begin()); - // Get pointers to device vectors - const auto* indvec_ptr = indvec_dvc.data(); - const auto* hvec_ptr = hvec_dvc.data(); - const auto* uvec_ptr = uvec.data(); - const auto* vvec_ptr = vvec.data(); - const auto* wvec_ptr = wvec.data(); // Loop through cells and perform interpolation for (int nl = 0; nl < nlevels; ++nl) { From 98baf66e67c85a132d10e1cb53a40dea29434870 Mon Sep 17 00:00:00 2001 From: Marc Henry de Frahan Date: Wed, 29 Oct 2025 13:43:41 -0600 Subject: [PATCH 4/7] tweaks --- cmake/FindFFTW.cmake | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/cmake/FindFFTW.cmake b/cmake/FindFFTW.cmake index b23952a..029b407 100644 --- a/cmake/FindFFTW.cmake +++ b/cmake/FindFFTW.cmake @@ -14,9 +14,7 @@ find_path( FFTW_INCLUDE_DIR NAMES fftw3.h PATHS - ${FFTW_ROOT} - /usr/include - /usr/local/include + ${FFTW_DIR} ) # Look for library (shared or static) @@ -24,10 +22,7 @@ find_library( FFTW_LIBRARY NAMES fftw3 libfftw3 PATHS - ${FFTW_ROOT} - /usr/lib - /usr/local/lib - /usr/lib/x86_64-linux-gnu + ${FFTW_DIR} ) include(FindPackageHandleStandardArgs) From d79779b84b8d75cb128f1b890ae4b6bd53350d66 Mon Sep 17 00:00:00 2001 From: Marc Henry de Frahan Date: Wed, 29 Oct 2025 13:48:56 -0600 Subject: [PATCH 5/7] simplify --- CMakeLists.txt | 49 ++----------------------------------------------- 1 file changed, 2 insertions(+), 47 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 563cadf..314b84a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,28 +1,9 @@ -cmake_minimum_required(VERSION 3.20) +cmake_minimum_required(VERSION 3.20 FATAL_ERROR) -project( Waves2AMR - LANGUAGES C CXX - ) - -message(STATUS "CMake version: ${CMAKE_VERSION}") +project(Waves2AMR LANGUAGES C CXX) list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") -# -# Check if CMAKE_BUILD_TYPE is given. If not, use default -# -if ( NOT CMAKE_BUILD_TYPE ) - set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo") - set(CMAKE_BUILD_TYPE Release - CACHE STRING - "Choose the build type, e.g. Release, Debug, or RelWithDebInfo." FORCE) -else () - message(STATUS "Build type set by user to '${CMAKE_BUILD_TYPE}'.") -endif() - -# -# Options -# option(WAVES2AMR_ENABLE_MPI "Enable MPI" OFF) set(WAVES2AMR_GPU_BACKEND_VALUES NONE SYCL CUDA HIP) @@ -33,9 +14,6 @@ if (NOT WAVES2AMR_GPU_BACKEND IN_LIST WAVES2AMR_GPU_BACKEND_VALUES) " Must be one of ${WAVES2AMR_GPU_BACKEND_VALUES}") endif () -# -# Find AMReX, check for required components -# if (NOT TARGET AMReX::amrex) set(AMREX_REQUIRED_COMPONENTS 3D DOUBLE) if (WAVES2AMR_ENABLE_MPI) @@ -47,21 +25,11 @@ if (NOT TARGET AMReX::amrex) find_package(AMReX CONFIG REQUIRED ${AMREX_REQUIRED_COMPONENTS} ) endif () -# -# Enable CUDA if requested -# if (WAVES2AMR_GPU_BACKEND STREQUAL "CUDA") include(AMReXTargetHelpers) endif () -# -# Define the object library to compile -# add_library(waves_2_amr OBJECT) -if (BUILD_SHARED_LIBS) - set_target_properties(waves_2_amr PROPERTIES POSITION_INDEPENDENT_CODE ON) -endif() -# Link required libraries target_link_libraries(waves_2_amr PUBLIC AMReX::amrex) find_package(FFTW REQUIRED) @@ -74,30 +42,18 @@ if (WAVES2AMR_GPU_BACKEND STREQUAL "CUDA") setup_target_for_cuda_compilation(waves_2_amr) endif () -if ( NOT CMAKE_CXX_FLAGS ) - target_link_libraries(waves_2_amr PUBLIC AMReX::Flags_CXX) -endif () - - -# Installation rules include(CMakePackageConfigHelpers) include(GNUInstallDirs) -# Create non-object library for use as external target add_library(waves_2_amr_api) -if (BUILD_SHARED_LIBS) - set_target_properties(waves_2_amr_api PROPERTIES POSITION_INDEPENDENT_CODE ON) -endif() target_link_libraries(waves_2_amr_api PUBLIC waves_2_amr) add_library(${PROJECT_NAME}::waves_2_amr_api ALIAS waves_2_amr) -# Collect all headers and make them installable with the target get_target_property(WAVES2AMR_INCLUDES waves_2_amr SOURCES) list(FILTER WAVES2AMR_INCLUDES INCLUDE REGEX "\\.h") set_target_properties( waves_2_amr PROPERTIES PUBLIC_HEADER "${WAVES2AMR_INCLUDES}") -# Install Waves2AMR install( TARGETS waves_2_amr_api waves_2_amr EXPORT ${PROJECT_NAME}Targets @@ -108,7 +64,6 @@ install( PUBLIC_HEADER DESTINATION include ) -# Make Waves2AMR discoverable using `find_package` install( EXPORT ${PROJECT_NAME}Targets NAMESPACE ${PROJECT_NAME}:: From 5654dcbdef704c4099ca069060aef45d191597ea Mon Sep 17 00:00:00 2001 From: Marc Henry de Frahan Date: Wed, 29 Oct 2025 14:03:03 -0600 Subject: [PATCH 6/7] tweak --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 314b84a..48db849 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,6 +48,7 @@ include(GNUInstallDirs) add_library(waves_2_amr_api) target_link_libraries(waves_2_amr_api PUBLIC waves_2_amr) add_library(${PROJECT_NAME}::waves_2_amr_api ALIAS waves_2_amr) +add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS waves_2_amr) get_target_property(WAVES2AMR_INCLUDES waves_2_amr SOURCES) list(FILTER WAVES2AMR_INCLUDES INCLUDE REGEX "\\.h") From 14ca329bbd626c3e90ed8f283a9ce6d249309c2d Mon Sep 17 00:00:00 2001 From: Marc Henry de Frahan Date: Wed, 29 Oct 2025 14:53:30 -0600 Subject: [PATCH 7/7] use target_link_libraries --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 48db849..bf0b776 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,7 +33,7 @@ add_library(waves_2_amr OBJECT) target_link_libraries(waves_2_amr PUBLIC AMReX::amrex) find_package(FFTW REQUIRED) -target_link_libraries_system(waves_2_amr PUBLIC FFTW::FFTW) +target_link_libraries(waves_2_amr PUBLIC FFTW::FFTW) add_subdirectory(src) add_subdirectory(include)