From 29e9c1578aa6358abc0c714e16d8c4a74511b44a Mon Sep 17 00:00:00 2001 From: Kacper Kornet Date: Fri, 18 Aug 2023 08:49:39 +0100 Subject: [PATCH] Record global dimensions in metadata file --- CMakeLists.txt | 19 +++++++++++++++---- Partitioner.cpp | 10 ++++++++++ examples/CMakeLists.txt | 2 +- test/CMakeLists.txt | 4 ++-- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index eb022a5..50a0124 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.10 FATAL_ERROR) -set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) @@ -36,8 +36,19 @@ set(CMAKE_INSTALL_RPATH $ORIGIN/${relDir1}:$ORIGIN/${relDir2}) # Dependencies find_package(Catch2 REQUIRED) find_package(MPI REQUIRED COMPONENTS CXX) -find_package(netCDF REQUIRED) -find_package(Zoltan REQUIRED) +find_package(PkgConfig) +pkg_search_module(NETCDF_CXX4 netcdf-cxx4) +if (NOT NETCDF_CXX4_FOUND) + find_package(netCDF REQUIRED) +endif() + +find_package(Zoltan QUIET) +if (NOT Zoltan_CONFIG_INCLUDED) + message("Lokking in paths: ${INCLUDE}") + find_path(ZOLTAN_INCLUDE_DIR zoltan.h HINTS ENV CPATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH REQUIRED) + find_library(Zoltan_LIBRARIES zoltan HINTS ENV LIBRARY_PATH REQUIRED) +endif() + find_package(Boost COMPONENTS program_options REQUIRED) # Generic options for compilation @@ -104,7 +115,7 @@ target_include_directories(${EXEC_NAME} ) target_link_libraries(${EXEC_NAME} PUBLIC MPI::MPI_CXX - PRIVATE netcdf ${Zoltan_LIBRARIES} Boost::program_options + PRIVATE netcdf ${Zoltan_LIBRARIES} "gfortran" Boost::program_options ) target_link_directories(${EXEC_NAME} PRIVATE ${netCDF_LIB_DIR} diff --git a/Partitioner.cpp b/Partitioner.cpp index ca098da..e6feca9 100644 --- a/Partitioner.cpp +++ b/Partitioner.cpp @@ -148,6 +148,16 @@ void Partitioner::save_metadata(const std::string& filename) const CHECK_MPI(MPI_Exscan(&right_num_neighbors, &right_offset, 1, MPI_INT, MPI_SUM, _comm)); + // Create 2 dimensions + // The values to be written are associated with the netCDF variable by + // assuming that the last dimension of the netCDF variable varies fastest in + // the C interface + const int NDIMS = 2; + int dimid_global[NDIMS]; + NC_CHECK(nc_def_dim(nc_id, "globalX", _global_ext_0, &dimid_global[0])); + NC_CHECK(nc_def_dim(nc_id, "globalY", _global_ext_1, &dimid_global[1])); + + // Define dimensions in netCDF file int dimid, top_dimid, bottom_dimid, left_dimid, right_dimid; NC_CHECK(nc_def_dim(nc_id, "P", _num_procs, &dimid)); diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 5c1d888..6ea93a4 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -17,7 +17,7 @@ function(create_example) ${ARG_SOURCES} ) target_link_libraries(${ARG_TARGET} - PRIVATE Boost::program_options ${PROJECT_NAME}::${LIB_NAME} + PRIVATE Boost::program_options ${PROJECT_NAME}::${LIB_NAME} "gfortran" ) target_include_directories(${ARG_TARGET} PRIVATE ${CMAKE_SOURCE_DIR} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ca92a90..fd06d93 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -18,13 +18,13 @@ function(create_test) main.cpp ) target_link_libraries(${ARG_TARGET} - PRIVATE Catch2::Catch2 ${PROJECT_NAME}::${LIB_NAME} + PRIVATE Catch2::Catch2 ${PROJECT_NAME}::${LIB_NAME} "gfortran" ) target_include_directories(${ARG_TARGET} PRIVATE ${CMAKE_SOURCE_DIR} ) foreach(numProcs RANGE 1 ${ARG_MAX_NUM_PROCS}) - add_test(NAME ${ARG_TARGET}_n${numProcs} COMMAND ${MPIEXEC} --oversubscribe ${MPIEXEC_NUMPROC_FLAG} ${numProcs} ${MPIEXEC_PREFLAGS} ./${ARG_TARGET}) + add_test(NAME ${ARG_TARGET}_n${numProcs} COMMAND ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${numProcs} ${MPIEXEC_PREFLAGS} ./${ARG_TARGET}) endforeach() endfunction()