From 693484191ae1cbd1d788cbddc7860ac130cc058a Mon Sep 17 00:00:00 2001 From: Jacob Merson Date: Sun, 21 Dec 2025 21:35:30 -0500 Subject: [PATCH] create a localization target We create a library that performs localization tasks. At the moment, we only have one strategy, i.e., use a unform grid for localization. However, we anticipate adding additional backends for AroborX (#245), adjacency based, KD-Tree, etc. This library split helps to organize the code, move things out of pcms::core which initally had everything, and clarify dependencies. --- config.cmake.in | 1 + src/CMakeLists.txt | 10 ++-- src/pcms/adapter/omega_h/omega_h_field.h | 2 +- src/pcms/adapter/omega_h/omega_h_field2.h | 2 +- src/pcms/interpolator/adj_search.hpp | 2 +- src/pcms/localization/CMakeLists.txt | 50 ++++++++++++++++++++ src/pcms/{ => localization}/point_search.cpp | 0 src/pcms/{ => localization}/point_search.h | 4 +- src/pcms/utility/CMakeLists.txt | 2 + src/pcms/{ => utility}/bounding_box.h | 0 src/pcms/{ => utility}/uniform_grid.h | 2 +- test/test_bounding_box.cpp | 2 +- test/test_point_search.cpp | 2 +- test/test_uniform_grid.cpp | 2 +- 14 files changed, 67 insertions(+), 14 deletions(-) create mode 100644 src/pcms/localization/CMakeLists.txt rename src/pcms/{ => localization}/point_search.cpp (100%) rename src/pcms/{ => localization}/point_search.h (96%) rename src/pcms/{ => utility}/bounding_box.h (100%) rename src/pcms/{ => utility}/uniform_grid.h (98%) diff --git a/config.cmake.in b/config.cmake.in index 65c2dc64..7309a5c3 100644 --- a/config.cmake.in +++ b/config.cmake.in @@ -17,6 +17,7 @@ if(@PCMS_ENABLE_OMEGA_H@) endif() include("${CMAKE_CURRENT_LIST_DIR}/pcms_utility-targets.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/pcms_localization-targets.cmake") include("${CMAKE_CURRENT_LIST_DIR}/pcms_core-targets.cmake") include("${CMAKE_CURRENT_LIST_DIR}/pcms_interpolator-targets.cmake") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 454b46ca..61c4c98d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,7 +2,6 @@ set( PCMS_HEADERS pcms.h - pcms/bounding_box.h pcms/coordinate.h pcms/coordinate_systems.h pcms/coordinate_transform.h @@ -39,21 +38,20 @@ list(APPEND PCMS_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/pcms/version.h ${CMAKE_CURR add_subdirectory(pcms/utility) +add_subdirectory(pcms/localization) + if(PCMS_ENABLE_XGC) list(APPEND PCMS_SOURCES pcms/adapter/xgc/xgc_reverse_classification.cpp) list(APPEND PCMS_HEADERS pcms/adapter/xgc/xgc_reverse_classification.h) endif() if(PCMS_ENABLE_OMEGA_H) - list(APPEND PCMS_SOURCES pcms/point_search.cpp) list( APPEND PCMS_HEADERS pcms/adapter/omega_h/omega_h_field.h pcms/transfer_field.h pcms/transfer_field2.h - pcms/uniform_grid.h - pcms/point_search.h ) endif() @@ -69,7 +67,7 @@ add_library(pcms::core ALIAS pcms_core) target_compile_features(pcms_core PUBLIC cxx_std_17) target_link_libraries( pcms_core PUBLIC meshfields::meshfields redev::redev - MPI::MPI_CXX Kokkos::kokkos perfstubs pcms::utility + MPI::MPI_CXX Kokkos::kokkos perfstubs pcms::utility pcms::localization ) if(PCMS_ENABLE_OMEGA_H) target_link_libraries(pcms_core PUBLIC Omega_h::omega_h) @@ -134,9 +132,11 @@ if(PCMS_ENABLE_Fortran) target_link_libraries(pcms_pcms INTERFACE pcms::fortranapi) endif() + add_subdirectory(pcms/interpolator) target_link_libraries(pcms_pcms INTERFACE pcms::interpolator) + install( TARGETS pcms_pcms EXPORT pcms-targets diff --git a/src/pcms/adapter/omega_h/omega_h_field.h b/src/pcms/adapter/omega_h/omega_h_field.h index 7a7283aa..f1e56257 100644 --- a/src/pcms/adapter/omega_h/omega_h_field.h +++ b/src/pcms/adapter/omega_h/omega_h_field.h @@ -10,7 +10,7 @@ #include #include "pcms/utility/arrays.h" #include "pcms/utility/array_mask.h" -#include "pcms/point_search.h" +#include "pcms/localization/point_search.h" #include #include #include "pcms/transfer_field.h" diff --git a/src/pcms/adapter/omega_h/omega_h_field2.h b/src/pcms/adapter/omega_h/omega_h_field2.h index dd567e37..fe3622cb 100644 --- a/src/pcms/adapter/omega_h/omega_h_field2.h +++ b/src/pcms/adapter/omega_h/omega_h_field2.h @@ -9,7 +9,7 @@ #include "pcms/utility/types.h" #include "pcms/field.h" #include "pcms/coordinate_system.h" -#include "pcms/point_search.h" +#include "pcms/localization/point_search.h" namespace pcms { diff --git a/src/pcms/interpolator/adj_search.hpp b/src/pcms/interpolator/adj_search.hpp index 6f90d823..428ab035 100644 --- a/src/pcms/interpolator/adj_search.hpp +++ b/src/pcms/interpolator/adj_search.hpp @@ -1,7 +1,7 @@ #ifndef ADJ_SEARCH_HPP #define ADJ_SEARCH_HPP -#include +#include #include #include "interpolation_helpers.h" // for helper functions diff --git a/src/pcms/localization/CMakeLists.txt b/src/pcms/localization/CMakeLists.txt new file mode 100644 index 00000000..c46aaad4 --- /dev/null +++ b/src/pcms/localization/CMakeLists.txt @@ -0,0 +1,50 @@ +set( + PCMS_LOCALIZATION_HEADERS + point_search.h +) + +set( + PCMS_LOCALIZATION_SOURCES + point_search.cpp +) +add_library(pcms_localization ${PCMS_LOCALIZATION_SOURCES}) +add_library(pcms::localization ALIAS pcms_localization) +target_include_directories( + pcms_localization + PUBLIC + # include path should be pcms/localization/ + "$" + # include path to search for pcms/config.h + "$" + "$") +target_link_libraries(pcms_localization PUBLIC Kokkos::kokkos pcms::utility Omega_h::omega_h) +target_compile_features(pcms_localization PUBLIC cxx_std_17) + +set_target_properties( + pcms_localization PROPERTIES OUTPUT_NAME pcmslocalization EXPORT_NAME + localization +) + +if (PCMS_ENABLE_SPDLOG) + target_link_libraries(pcms_localization PUBLIC spdlog::spdlog) +endif () + +## export the library +set_target_properties(pcms_localization PROPERTIES PUBLIC_HEADER "${PCMS_LOCALIZATION_HEADERS}") + +install( + TARGETS pcms_localization + EXPORT pcms_localization-targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pcms/localization +) + +install( + EXPORT pcms_localization-targets + NAMESPACE pcms:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pcms +) \ No newline at end of file diff --git a/src/pcms/point_search.cpp b/src/pcms/localization/point_search.cpp similarity index 100% rename from src/pcms/point_search.cpp rename to src/pcms/localization/point_search.cpp diff --git a/src/pcms/point_search.h b/src/pcms/localization/point_search.h similarity index 96% rename from src/pcms/point_search.h rename to src/pcms/localization/point_search.h index d31add27..aeeb0010 100644 --- a/src/pcms/point_search.h +++ b/src/pcms/localization/point_search.h @@ -6,8 +6,8 @@ #include "pcms/utility/types.h" #include #include -#include "pcms/uniform_grid.h" -#include "pcms/bounding_box.h" +#include "pcms/utility/uniform_grid.h" +#include "pcms/utility/bounding_box.h" namespace pcms { diff --git a/src/pcms/utility/CMakeLists.txt b/src/pcms/utility/CMakeLists.txt index 9e5b14f4..cbfbe80d 100644 --- a/src/pcms/utility/CMakeLists.txt +++ b/src/pcms/utility/CMakeLists.txt @@ -2,6 +2,7 @@ set( PCMS_UTILITY_HEADERS arrays.h assert.h + bounding_box.h common.h memory_spaces.h types.h @@ -9,6 +10,7 @@ set( inclusive_scan.h profile.h print.h + uniform_grid.h ) set( diff --git a/src/pcms/bounding_box.h b/src/pcms/utility/bounding_box.h similarity index 100% rename from src/pcms/bounding_box.h rename to src/pcms/utility/bounding_box.h diff --git a/src/pcms/uniform_grid.h b/src/pcms/utility/uniform_grid.h similarity index 98% rename from src/pcms/uniform_grid.h rename to src/pcms/utility/uniform_grid.h index 5ec13d19..4dabdbd4 100644 --- a/src/pcms/uniform_grid.h +++ b/src/pcms/utility/uniform_grid.h @@ -1,6 +1,6 @@ #ifndef PCMS_COUPLING_UNIFORM_GRID_H #define PCMS_COUPLING_UNIFORM_GRID_H -#include "pcms/bounding_box.h" +#include "pcms/utility/bounding_box.h" #include "Omega_h_vector.hpp" #include namespace pcms diff --git a/test/test_bounding_box.cpp b/test/test_bounding_box.cpp index bda75d9b..f29f9567 100644 --- a/test/test_bounding_box.cpp +++ b/test/test_bounding_box.cpp @@ -1,5 +1,5 @@ #include -#include +#include using pcms::AABBox; using pcms::intersects; diff --git a/test/test_point_search.cpp b/test/test_point_search.cpp index 06bacf48..feb2950e 100644 --- a/test/test_point_search.cpp +++ b/test/test_point_search.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include diff --git a/test/test_uniform_grid.cpp b/test/test_uniform_grid.cpp index 9cdc3f39..1f7e848b 100644 --- a/test/test_uniform_grid.cpp +++ b/test/test_uniform_grid.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include using pcms::Uniform2DGrid;