3D EM based on Schur decomposition
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CMakeLists.txt 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. # Configure EMSchur3D
  2. set(EMSCHUR3D_VERSION_MAJOR "0")
  3. set(EMSCHUR3D_VERSION_MINOR "0")
  4. set(EMSCHUR3D_VERSION_PATCH "1")
  5. set(EMSCHUR3D_VERSION "\"${EMSCHUR3D_VERSION_MAJOR}.${EMSCHUR3D_VERSION_MINOR}.${EMSCHUR3D_VERSION_PATCH}\"")
  6. set(EMSCHUR3D_VERSION_NOQUOTES "${EMSCHUR3D_VERSION_MAJOR}.${EMSCHUR3D_VERSION_MINOR}.${EMSCHUR3D_VERSION_PATCH}")
  7. option ( LEMMA_MODULE_EMSCHUR3D TRUE )
  8. option ( LEMMA_USE_SUPERLU FALSE)
  9. if (LEMMA_USE_SUPERLU)
  10. find_package( SuperLU )
  11. if (SUPERLU_FOUND)
  12. message( STATUS "SuperLU was found" )
  13. add_compile_options(-DHAVE_SUPERLU)
  14. INCLUDE_DIRECTORIES(${SUPERLU_INCLUDES})
  15. endif()
  16. endif()
  17. #find_package( PaSTiX )
  18. #find_package( PaSTiX COMPONENTS METIS SEQ )
  19. #find_path(PASTIX_pastix_nompi.h_INCLUDE_DIRS
  20. # #NAMES pastix/nompi.h
  21. # NAMES pastix_nompi.h
  22. # HINTS ${PASTIX_INCLUDE_DIRS}
  23. #)
  24. #if (NOT PASTIX_pastix_nompi.h_INCLUDE_DIRS)
  25. # message(STATUS "A version of Pastix has been found but pastix_nompi.h does not exist in the include directory."
  26. # " Because Eigen tests require a version without MPI, we disable the Pastix backend.")
  27. #endif()
  28. #if(PASTIX_FOUND AND PASTIX_pastix_nompi.h_INCLUDE_DIRS)
  29. # add_definitions("-DEIGEN_PASTIX_SUPPORT")
  30. # include_directories(${PASTIX_INCLUDE_DIRS_DEP})
  31. # if(SCOTCH_FOUND)
  32. # include_directories(${SCOTCH_INCLUDE_DIRS})
  33. # set(PASTIX_LIBRARIES ${PASTIX_LIBRARIES} ${SCOTCH_LIBRARIES})
  34. # elseif(METIS_FOUND)
  35. # include_directories(${METIS_INCLUDE_DIRS})
  36. # set(PASTIX_LIBRARIES ${PASTIX_LIBRARIES} ${METIS_LIBRARIES})
  37. # else(SCOTCH_FOUND)
  38. # ei_add_property(EIGEN_MISSING_BACKENDS "PaStiX, ")
  39. # endif(SCOTCH_FOUND)
  40. # set(SPARSE_LIBS ${SPARSE_LIBS} ${PASTIX_LIBRARIES_DEP} ${ORDERING_LIBRARIES})
  41. # set(PASTIX_ALL_LIBS ${PASTIX_LIBRARIES_DEP})
  42. # ei_add_property(EIGEN_TESTED_BACKENDS "PaStiX, ")
  43. #else()
  44. # ei_add_property(EIGEN_MISSING_BACKENDS "PaStiX, ")
  45. #endif()
  46. #if ( PASTIX_FOUND )
  47. # message( STATUS "PaSTiX was found" )
  48. # add_compile_options(-DHAVE_PASTIX)
  49. # INCLUDE_DIRECTORIES(${PASTIX_INCLUDES})
  50. #endif()
  51. find_package( Umfpack )
  52. if ( UMFPACK_FOUND )
  53. message( STATUS "Umfpack was found" )
  54. add_compile_options(-DHAVE_UMFPACK)
  55. INCLUDE_DIRECTORIES(${UMFPACK_INCLUDES})
  56. endif()
  57. if ( LEMMA_VTK6_SUPPORT OR LEMMA_VTK7_SUPPORT OR LEMMA_VTK8_SUPPORT AND LEMMA_MODULE_EMSCHUR3D )
  58. configure_file (
  59. "${CMAKE_CURRENT_SOURCE_DIR}/config/EMSchur3DConfig.h.in"
  60. "${PROJECT_BINARY_DIR}/include/EMSchur3DConfig.h"
  61. )
  62. install ( FILES ${PROJECT_BINARY_DIR}/include/EMSchur3DConfig.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include/Lemma/ )
  63. add_subdirectory("src")
  64. add_library( emschur3d ${EMSCHUR3DSOURCE} )
  65. target_include_directories( emschur3d PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" )
  66. set_target_properties(emschur3d PROPERTIES
  67. VERSION "${EMSCHUR3D_VERSION_NOQUOTES}"
  68. SOVERSION "${EMSCHUR3D_VERSION_MAJOR}.${LEMMA_VERSION_MINOR}"
  69. PROJECT_LABEL "EMSCHUR3D ${LABEL_SUFFIX}"
  70. CXX_STANDARD_14
  71. CXX_STANDARD_REQUIRED_ON
  72. )
  73. option ( EMSCHUR3D_ON_KINGSPEAK FALSE )
  74. if ( EMSCHUR3D_ON_KINGSPEAK )
  75. # No OpenMP
  76. add_compile_options(-DHAVE_PARDISO)
  77. #set (MKLLINK "-L$MKLROOT/lib/intel64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -Wl,-rpath=$MKLROOT/lib/intel64")
  78. # OpenMP R3
  79. set (MKLLINK "-L$MKLROOT/lib/intel64 -Wl,-rpath=$MKLROOT/lib/intel64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread")
  80. add_compile_options( -DEIGEN_USE_MKL_ALL )
  81. target_link_libraries(emschur3d "lemmacore" ${MKLLINK})
  82. else()
  83. find_library( PARDISO600
  84. NAMES pardiso600 libpardiso600.so libpardiso600-GNU800-X86-64.so
  85. HINTS $(CMAKE_INSTALL_PREFIX)
  86. PATH_SUFFIXES lib
  87. )
  88. if (PARDISO600)
  89. add_compile_options(-DHAVE_PARDISO -mkl) # -mkl ONLY WORKS WITH INTEL, but academic pardiso doesn't include headers...
  90. target_link_libraries( emschur3d "lemmacore" )
  91. endif()
  92. endif()
  93. # Linking
  94. target_link_libraries(emschur3d "lemmacore" "fdem1d" )
  95. # Linking
  96. target_link_libraries(emschur3d ${VTK_LIBRARIES})
  97. if ( SUPERLU_FOUND )
  98. target_link_libraries(emschur3d ${SUPERLU_LIBRARIES})
  99. endif()
  100. if ( PASTIX_FOUND )
  101. target_link_libraries(emschur3d ${PASTIX_LIBRARIES})
  102. target_link_libraries(emschur3d "blas" "metis" "scotch" "scotchmetis" "scotcherr" "scotcherrexit" "hwloc")
  103. endif()
  104. if ( UMFPACK_FOUND )
  105. target_link_libraries(emschur3d ${UMFPACK_LIBRARIES})
  106. endif()
  107. # Testing
  108. if (LEMMA_ENABLE_TESTING)
  109. add_subdirectory(testing)
  110. endif()
  111. # Install
  112. install ( TARGETS emschur3d DESTINATION ${CMAKE_INSTALL_PREFIX}/lib )
  113. install ( FILES include/EMSchur3D DESTINATION ${CMAKE_INSTALL_PREFIX}/include/Lemma )
  114. install ( DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include/Lemma FILES_MATCHING PATTERN "*.h")
  115. #install ( DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include/Lemma/ FILES_MATCHING PATTERN "FDEM1D")
  116. #install ( DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include/Lemma/FDEM1D FILES_MATCHING PATTERN "*.h")
  117. # Examples
  118. if ( LEMMA_BUILD_EXAMPLES)
  119. add_subdirectory(examples)
  120. endif()
  121. else()
  122. if ( LEMMA_MODULE_EMSCHUR3D )
  123. message ( FATAL_ERROR
  124. "EMSChur3D requires VTK 6, 7, or 8"
  125. )
  126. endif()
  127. endif()