2011-02-17 10:09:06 -06:00
|
|
|
PROJECT(IFEM)
|
|
|
|
|
|
|
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
|
|
|
|
|
2011-02-22 11:35:18 -06:00
|
|
|
# Required defines (well, PROFILE_LEVEL is not actually required, but...)
|
2011-12-08 01:34:30 -06:00
|
|
|
SET(CMAKE_CXX_FLAGS "-Dreal=double -DepsZ=1.0e-12 -DPROFILE_LEVEL=3")
|
2011-03-25 03:46:04 -05:00
|
|
|
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DINDEX_CHECK=2")
|
|
|
|
IF(VERBOSE_DEBUG GREATER 0)
|
|
|
|
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSP_DEBUG=${VERBOSE_DEBUG}")
|
|
|
|
ENDIF(VERBOSE_DEBUG GREATER 0)
|
2011-02-17 10:09:06 -06:00
|
|
|
|
|
|
|
ENABLE_LANGUAGE(Fortran)
|
|
|
|
IF(CMAKE_Fortran_COMPILER MATCHES ifort)
|
|
|
|
SET(LANGUAGE_LIBS -lifcore)
|
|
|
|
ENDIF(CMAKE_Fortran_COMPILER MATCHES ifort)
|
|
|
|
|
|
|
|
ENABLE_LANGUAGE(CXX)
|
|
|
|
IF(CMAKE_CXX_COMPILER MATCHES icpc)
|
2011-12-19 09:52:30 -06:00
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_MKL -mkl=sequential")
|
2011-02-17 10:09:06 -06:00
|
|
|
ELSE(CMAKE_CXX_COMPILER MATCHES icpc)
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_CBLAS")
|
2012-01-16 07:05:57 -06:00
|
|
|
FIND_PACKAGE(LAPACK REQUIRED)
|
2011-02-17 10:09:06 -06:00
|
|
|
ENDIF(CMAKE_CXX_COMPILER MATCHES icpc)
|
|
|
|
|
2011-05-12 08:18:58 -05:00
|
|
|
ENABLE_TESTING()
|
|
|
|
|
2011-02-17 10:09:06 -06:00
|
|
|
# Add local modules
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
|
|
|
|
${CMAKE_SOURCE_DIR}/cmake/Modules)
|
|
|
|
|
|
|
|
# Required packages
|
|
|
|
FIND_PACKAGE(GoTools REQUIRED)
|
|
|
|
FIND_PACKAGE(GoTrivariate REQUIRED)
|
2011-02-22 11:35:18 -06:00
|
|
|
FIND_PACKAGE(ARPACK REQUIRED)
|
2011-02-17 10:09:06 -06:00
|
|
|
|
2011-12-13 07:27:19 -06:00
|
|
|
# Mimimum GoTools version
|
|
|
|
IF(GoTools_VERSION_MAJOR LESS 3 OR NOT GoTools_VERSION_MAJOR)
|
|
|
|
MESSAGE(FATAL_ERROR "GoTools >= 3.0.0 required. bailing")
|
|
|
|
ENDIF(GoTools_VERSION_MAJOR LESS 3 OR NOT GoTools_VERSION_MAJOR)
|
|
|
|
|
2011-02-17 10:09:06 -06:00
|
|
|
# Optional packages
|
|
|
|
IF(${ENABLE_PETSC})
|
|
|
|
FIND_PACKAGE(Petsc)
|
|
|
|
ENDIF(${ENABLE_PETSC})
|
2011-02-22 11:35:18 -06:00
|
|
|
IF(NOT "${DISABLE_SUPERLU}")
|
2011-02-17 10:09:06 -06:00
|
|
|
FIND_PACKAGE(SuperLU)
|
2011-02-22 11:35:18 -06:00
|
|
|
ENDIF(NOT "${DISABLE_SUPERLU}")
|
2011-09-20 04:21:40 -05:00
|
|
|
IF(${ENABLE_SPR})
|
|
|
|
FIND_PACKAGE(SPR)
|
|
|
|
ENDIF(${ENABLE_SPR})
|
2011-02-17 10:09:06 -06:00
|
|
|
IF(${ENABLE_SAMG})
|
|
|
|
FIND_PACKAGE(SAMG)
|
|
|
|
ENDIF(${ENABLE_SAMG})
|
2011-02-22 11:35:18 -06:00
|
|
|
FIND_PACKAGE(VTFWriter)
|
2011-05-16 04:13:57 -05:00
|
|
|
IF(NOT "${DISABLE_HDF5}")
|
|
|
|
FIND_PACKAGE(HDF5)
|
|
|
|
ENDIF(NOT "${DISABLE_HDF5}")
|
2011-09-20 04:45:59 -05:00
|
|
|
IF(NOT "${DISABLE_LRSPLINE}")
|
|
|
|
FIND_PACKAGE(LRSpline)
|
|
|
|
ENDIF(NOT "${DISABLE_LRSPLINE}")
|
2012-01-22 12:12:49 -06:00
|
|
|
IF(NOT "${DISABLE_OPENMP}")
|
|
|
|
FIND_PACKAGE(OpenMP)
|
|
|
|
ENDIF(NOT "${DISABLE_OPENMP}")
|
2011-02-17 10:09:06 -06:00
|
|
|
|
|
|
|
# Required libraries
|
2011-02-22 11:35:18 -06:00
|
|
|
SET(DEPLIBS ${GoTrivariate_LIBRARIES} ${GoTools_LIBRARIES}
|
|
|
|
${ARPACK_LIBRARIES} ${LAPACK_LIBRARIES}
|
2011-12-08 01:34:30 -06:00
|
|
|
${LANGUAGE_LIBS}
|
2011-02-17 10:09:06 -06:00
|
|
|
)
|
|
|
|
|
|
|
|
# Required include directories
|
|
|
|
SET(INCLUDES
|
|
|
|
${GoTools_INCLUDE_DIRS}
|
|
|
|
${GoTrivariate_INCLUDE_DIRS}
|
|
|
|
${PROJECT_SOURCE_DIR}/src/ASM
|
|
|
|
${PROJECT_SOURCE_DIR}/src/Eig
|
|
|
|
${PROJECT_SOURCE_DIR}/src/Integrands
|
|
|
|
${PROJECT_SOURCE_DIR}/src/LinAlg
|
|
|
|
${PROJECT_SOURCE_DIR}/src/SIM
|
|
|
|
${PROJECT_SOURCE_DIR}/src/Utility
|
2011-05-07 11:56:47 -05:00
|
|
|
${PROJECT_SOURCE_DIR}/3rdparty/tinyxml
|
2011-12-08 07:18:03 -06:00
|
|
|
${PROJECT_SOURCE_DIR}/3rdparty/expreval
|
2011-02-17 10:09:06 -06:00
|
|
|
)
|
|
|
|
|
2012-01-22 12:12:49 -06:00
|
|
|
# Set libraries, include directories and compiler flags from optional packages
|
2011-12-19 09:52:32 -06:00
|
|
|
|
2011-02-22 11:35:18 -06:00
|
|
|
IF(SuperLU_MT_LIBRARIES AND SuperLU_MT_INCLUDES AND "${ENABLE_SUPERLU_MT}")
|
|
|
|
FIND_PACKAGE(Threads REQUIRED)
|
|
|
|
SET(DEPLIBS ${DEPLIBS} ${SuperLU_MT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
|
|
|
SET(INCLUDES ${INCLUDES} ${SuperLU_MT_INCLUDES})
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAS_SUPERLU_MT")
|
|
|
|
ELSEIF(SuperLU_LIBRARIES AND SuperLU_INCLUDES)
|
|
|
|
SET(DEPLIBS ${DEPLIBS} ${SuperLU_LIBRARIES})
|
|
|
|
SET(INCLUDES ${INCLUDES} ${SuperLU_INCLUDES})
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAS_SUPERLU")
|
|
|
|
ENDIF(SuperLU_MT_LIBRARIES AND SuperLU_MT_INCLUDES AND "${ENABLE_SUPERLU_MT}")
|
2011-02-17 10:09:06 -06:00
|
|
|
|
2011-09-20 04:21:40 -05:00
|
|
|
IF(SPR_LIBRARIES)
|
|
|
|
SET(DEPLIBS ${DEPLIBS} ${SPR_LIBRARIES})
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAS_SPR -DUSE_F77SAM")
|
|
|
|
ENDIF(SPR_LIBRARIES)
|
|
|
|
|
2011-02-17 10:09:06 -06:00
|
|
|
IF(PETSC_LIBRARIES AND PETSC_INCLUDE_DIR)
|
2011-02-27 09:00:33 -06:00
|
|
|
SET(INCLUDES ${INCLUDES} ${PETSC_INCLUDE_DIR} ${PETSCCONF_INCLUDE_DIR})
|
2011-02-17 10:09:06 -06:00
|
|
|
SET(DEPLIBS ${DEPLIBS} ${PETSC_LIBRARIES})
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAS_PETSC")
|
2011-03-02 10:41:27 -06:00
|
|
|
IF(${ENABLE_PARALLEL_PETSC})
|
2011-03-08 03:23:44 -06:00
|
|
|
FIND_PACKAGE(MPI REQUIRED)
|
|
|
|
SET(INCLUDES ${INCLUDES} ${MPI_INCLUDE_PATH})
|
|
|
|
SET(DEPLIBS ${DEPLIBS} ${MPI_LIBRARIES})
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPARALLEL_PETSC")
|
2011-03-02 10:41:27 -06:00
|
|
|
ENDIF(${ENABLE_PARALLEL_PETSC})
|
2011-02-17 10:09:06 -06:00
|
|
|
FIND_PACKAGE(SLEPc)
|
|
|
|
IF(SLEPC_LIBRARIES AND SLEPC_INCLUDES)
|
|
|
|
SET(INCLUDES ${INCLUDES} ${SLEPC_INCLUDES})
|
|
|
|
SET(DEPLIBS ${DEPLIBS} ${SLEPC_LIBRARIES})
|
2011-03-08 03:23:44 -06:00
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAS_SLEPC")
|
2011-02-17 10:09:06 -06:00
|
|
|
ENDIF(SLEPC_LIBRARIES AND SLEPC_INCLUDES)
|
|
|
|
ENDIF(PETSC_LIBRARIES AND PETSC_INCLUDE_DIR)
|
|
|
|
|
|
|
|
IF(SAMG_LIBRARIES AND SAMG_INCLUDES)
|
|
|
|
SET(DEPLIBS ${DEPLIBS} ${SAMG_LIBRARIES})
|
|
|
|
SET(INCLUDES ${INCLUDES} ${SAMG_INCLUDES})
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAS_SAMG -DSAMG_UNIX_LINUX=1 -DSAMG_LCASE_USCORE")
|
|
|
|
ENDIF(SAMG_LIBRARIES AND SAMG_INCLUDES)
|
|
|
|
|
|
|
|
IF(VTFWRITER_LIBRARIES AND VTFWRITER_INCLUDES)
|
|
|
|
SET(DEPLIBS ${DEPLIBS} ${VTFWRITER_LIBRARIES})
|
|
|
|
SET(INCLUDES ${INCLUDES} ${VTFWRITER_INCLUDES})
|
2011-06-07 09:29:10 -05:00
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAS_VTFAPI=${VTFAPI}")
|
2011-02-17 10:09:06 -06:00
|
|
|
ENDIF(VTFWRITER_LIBRARIES AND VTFWRITER_INCLUDES)
|
|
|
|
|
2011-05-07 11:56:47 -05:00
|
|
|
IF(HDF5_LIBRARIES AND HDF5_INCLUDE_DIR)
|
|
|
|
SET(DEPLIBS ${DEPLIBS} ${HDF5_LIBRARIES})
|
|
|
|
SET(INCLUDES ${INCLUDES} ${HDF5_INCLUDE_DIR})
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAS_HDF5=1")
|
|
|
|
ENDIF(HDF5_LIBRARIES AND HDF5_INCLUDE_DIR)
|
|
|
|
|
2011-09-20 04:45:59 -05:00
|
|
|
IF(LRSpline_LIBRARIES AND LRSpline_INCLUDE_DIRS)
|
|
|
|
SET(DEPLIBS ${DEPLIBS} ${LRSpline_LIBRARIES})
|
|
|
|
SET(INCLUDES
|
|
|
|
${INCLUDES}
|
|
|
|
${LRSpline_INCLUDE_DIRS}
|
|
|
|
${PROJECT_SOURCE_DIR}/src/ASM/LR)
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAS_LRSPLINE=1")
|
|
|
|
ENDIF(LRSpline_LIBRARIES AND LRSpline_INCLUDE_DIRS)
|
|
|
|
|
2012-01-22 12:12:49 -06:00
|
|
|
IF(OPENMP_FOUND)
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -DUSE_OPENMP")
|
|
|
|
ENDIF(OPENMP_FOUND)
|
|
|
|
|
2011-02-17 10:09:06 -06:00
|
|
|
INCLUDE_DIRECTORIES(${INCLUDES})
|
|
|
|
|
|
|
|
SET(EXECUTABLE_OUTPUT_PATH bin)
|
|
|
|
SET(LIBRARY_OUTPUT_PATH lib)
|
|
|
|
|
|
|
|
IF(NOT WIN32)
|
2011-03-08 03:23:44 -06:00
|
|
|
# Emit position-independent code, suitable for dynamic linking
|
2011-02-17 10:09:06 -06:00
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
2011-03-08 03:23:44 -06:00
|
|
|
# Enable all warnings
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-parentheses")
|
2011-02-17 10:09:06 -06:00
|
|
|
ENDIF(NOT WIN32)
|
|
|
|
|
2012-01-22 12:12:49 -06:00
|
|
|
# Additional compiler flags required by GoTools
|
2011-12-13 07:27:19 -06:00
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GoTools_CXX_FLAGS}")
|
|
|
|
|
2011-02-17 10:09:06 -06:00
|
|
|
# Make the IFEM library
|
2011-05-07 11:56:47 -05:00
|
|
|
FILE(GLOB_RECURSE IFEM_SRCS ${PROJECT_SOURCE_DIR}/src/*.[Cf]
|
2011-12-08 07:18:03 -06:00
|
|
|
${PROJECT_SOURCE_DIR}/3rdparty/*.C
|
|
|
|
${PROJECT_SOURCE_DIR}/3rdparty/*.cpp)
|
2011-09-20 04:45:59 -05:00
|
|
|
IF(NOT(LRSpline_LIBRARIES AND LRSpline_INCLUDE_DIRS))
|
|
|
|
string(REGEX REPLACE "${PROJECT_SOURCE_DIR}/src/ASM/LR/[^;]*" "" IFEM_SRCS "${IFEM_SRCS}")
|
|
|
|
ENDIF(NOT(LRSpline_LIBRARIES AND LRSpline_INCLUDE_DIRS))
|
2011-02-17 10:09:06 -06:00
|
|
|
ADD_LIBRARY(IFEM ${IFEM_SRCS})
|
|
|
|
|
2011-05-22 06:25:42 -05:00
|
|
|
# Make some Apps
|
2011-02-17 10:09:06 -06:00
|
|
|
FILE(GLOB_RECURSE Poisson_SRCS ${PROJECT_SOURCE_DIR}/Apps/Poisson/*.C)
|
|
|
|
ADD_EXECUTABLE(Poisson ${Poisson_SRCS})
|
|
|
|
TARGET_LINK_LIBRARIES(Poisson IFEM ${DEPLIBS})
|
|
|
|
|
2011-02-27 09:00:33 -06:00
|
|
|
FILE(GLOB_RECURSE LinEl_SRCS
|
|
|
|
${PROJECT_SOURCE_DIR}/Apps/LinearElasticity/main_LinEl3D.C
|
|
|
|
${PROJECT_SOURCE_DIR}/Apps/LinearElasticity/SIMLinEl*.C)
|
2011-02-22 11:35:18 -06:00
|
|
|
ADD_EXECUTABLE(LinEl ${LinEl_SRCS})
|
|
|
|
TARGET_LINK_LIBRARIES(LinEl IFEM ${DEPLIBS})
|
|
|
|
|
2011-05-22 06:25:42 -05:00
|
|
|
IF(HDF5_LIBRARIES AND VTFWRITER_LIBRARIES)
|
2011-06-16 08:03:34 -05:00
|
|
|
FILE(GLOB_RECURSE HDF2VTF_SRCS ${PROJECT_SOURCE_DIR}/Apps/HDF5toVTx/*.C)
|
|
|
|
ADD_EXECUTABLE(HDF5toVTx ${HDF2VTF_SRCS})
|
|
|
|
TARGET_LINK_LIBRARIES(HDF5toVTx IFEM ${DEPLIBS})
|
2011-05-22 06:25:42 -05:00
|
|
|
ENDIF(HDF5_LIBRARIES AND VTFWRITER_LIBRARIES)
|
|
|
|
|
|
|
|
# Regression tests
|
2011-05-12 08:18:58 -05:00
|
|
|
FILE(GLOB_RECURSE LINEL_TESTFILES "${PROJECT_SOURCE_DIR}/Apps/LinearElasticity/Test/*.reg")
|
|
|
|
FOREACH(TESTFILE ${LINEL_TESTFILES})
|
|
|
|
ADD_TEST(${TESTFILE} ${PROJECT_SOURCE_DIR}/test/regtest.sh "${CMAKE_BINARY_DIR}/${EXECUTABLE_OUTPUT_PATH}/LinEl" "${TESTFILE}")
|
|
|
|
ENDFOREACH()
|
|
|
|
|
|
|
|
FILE(GLOB_RECURSE POISSON_TESTFILES "${PROJECT_SOURCE_DIR}/Apps/Poisson/Test/*.reg")
|
|
|
|
FOREACH(TESTFILE ${POISSON_TESTFILES})
|
|
|
|
ADD_TEST(${TESTFILE} ${PROJECT_SOURCE_DIR}/test/regtest.sh "${CMAKE_BINARY_DIR}/${EXECUTABLE_OUTPUT_PATH}/Poisson" "${TESTFILE}")
|
|
|
|
ENDFOREACH()
|
|
|
|
|
2011-02-17 10:09:06 -06:00
|
|
|
IF(NOT IFEM_INSTALL_PREFIX)
|
|
|
|
SET(IFEM_INSTALL_PREFIX $ENV{HOME})
|
|
|
|
ENDIF(NOT IFEM_INSTALL_PREFIX)
|
|
|
|
|
|
|
|
# 'install' target
|
|
|
|
IF(WIN32)
|
|
|
|
# TODO
|
|
|
|
ELSE(WIN32)
|
2011-11-22 07:01:31 -06:00
|
|
|
# applications
|
2011-12-12 07:05:09 -06:00
|
|
|
SET(INSTALL_TARGETS Poisson LinEl)
|
|
|
|
IF(VTFWRITER_LIBRARIES AND VTFWRITER_INCLUDES AND
|
|
|
|
HDF5_LIBRARIES AND VTFWRITER_LIBRARIES)
|
|
|
|
SET(INSTALL_TARGETS ${INSTALL_TARGETS} HDF5toVTx)
|
|
|
|
ENDIF(VTFWRITER_LIBRARIES AND VTFWRITER_INCLUDES AND
|
|
|
|
HDF5_LIBRARIES AND VTFWRITER_LIBRARIES)
|
|
|
|
INSTALL(TARGETS ${INSTALL_TARGETS}
|
2011-11-22 07:01:31 -06:00
|
|
|
DESTINATION ${IFEM_INSTALL_PREFIX}/bin)
|
|
|
|
|
2011-02-17 10:09:06 -06:00
|
|
|
# lib
|
|
|
|
INSTALL(TARGETS IFEM DESTINATION ${IFEM_INSTALL_PREFIX}/lib)
|
|
|
|
|
|
|
|
# headers
|
2011-11-22 07:01:31 -06:00
|
|
|
FILE(GLOB IFEM_HEADERS src/ASM/AlgEqSystem.h src/ASM/ASMbase.h
|
|
|
|
src/ASM/ASMenums.h src/ASM/ASMmxBase.h
|
|
|
|
src/ASM/ASMstruct.h src/ASM/ElmMats.h src/ASM/ElmNorm.h
|
|
|
|
src/ASM/Field.h src/ASM/Fields.h
|
|
|
|
src/ASM/FiniteElement.h src/ASM/GlbNorm.h
|
|
|
|
src/ASM/GlobalIntegral.h src/ASM/IntegrandBase.h
|
|
|
|
src/ASM/Integrand.h src/ASM/Lagrange.h
|
|
|
|
src/ASM/LocalIntegral.h src/ASM/SAMpatch.h
|
|
|
|
src/ASM/TimeDomain.h
|
|
|
|
src/Integrands/*.h src/LinAlg/*.h src/SIM/*.h
|
|
|
|
src/Utility/*.h)
|
2011-02-17 10:09:06 -06:00
|
|
|
INSTALL(FILES ${IFEM_HEADERS}
|
|
|
|
DESTINATION ${IFEM_INSTALL_PREFIX}/include/IFEM)
|
|
|
|
|
|
|
|
# cmake modules
|
2011-11-22 07:01:31 -06:00
|
|
|
FILE(GLOB_RECURSE LOCAL_CMAKE_MODULES cmake/Modules/*.cmake)
|
|
|
|
INSTALL(FILES ${LOCAL_CMAKE_MODULES}
|
|
|
|
DESTINATION ${IFEM_INSTALL_PREFIX}/cmake/Modules)
|
2011-02-17 10:09:06 -06:00
|
|
|
ENDIF(WIN32)
|