CMakeLists.txt 11.4 KB
Newer Older
1
project(AMDiS)
Naumann, Andreas's avatar
Naumann, Andreas committed
2

3 4 5
cmake_minimum_required(VERSION 2.8)

set(AMDiS_SOURCE_DIR "${AMDiS_SOURCE_DIR}/src")
Naumann, Andreas's avatar
Naumann, Andreas committed
6 7
#needs: --enable-debug, enable-intel --enable-openmp --enable-parmetis --enable-parallel-domain --enable-umfpack --enable-mkl --enable-boost --enable-marmot

8 9 10
SET(LIB_DIR ./lib)
SET(SOURCE_DIR ${AMDiS_SOURCE_DIR})

11
#TODO: use the cmake build type
12 13
SET(MTL_DIR ${LIB_DIR}/mtl4/ CACHE PATH "mtl4 directory")

Naumann, Andreas's avatar
Naumann, Andreas committed
14 15 16 17 18
option(ENABLE_DEBUG "debug" false)
#option(ENABLE_INTEL "use intel compiler" false)
option(ENABLE_OPENMP "use openmp" false)
option(ENABLE_PARMETIS "use partion of unity and enable parmetis" false)
option(ENABLE_PARALLEL_DOMAIN "use parallel domain decomposition" false)
19
SET(PETSC_DIR "" CACHE PATH "Petsc directory for parallel domain decomposition" )
Naumann, Andreas's avatar
Naumann, Andreas committed
20 21 22
SET(PETSC_ARCH "" CACHE STRING "Petsc architecture")
option(ENABLE_UMFPACK "use umfpack solver" false)
option(ENABLE_MKL "use the mkl" false)
23
SET(MKL_DIR "" CACHE PATH "MKL directory")
Naumann, Andreas's avatar
Naumann, Andreas committed
24
option(ENABLE_DUNE "use dune" false)
25
SET(DUNE_DIR "" CACHE PATH "Dune directory")
26
#option(ENABLE_BOOST "use the boost library" false)
Naumann, Andreas's avatar
Naumann, Andreas committed
27 28 29 30 31 32 33 34 35 36 37 38 39
option(ENABLE_MARMOT "use marmot" false)
option(ENABLE_GUI "compile the gui" false)
#option(ENABLE_TESTS "compile the tests" false)
SET(ENABLE_TESTS false)

if(ENABLE_INTEL)
	Message("please set the icc manually")
	INCLUDE (CMakeForceCompiler)
	CMAKE_FORCE_C_COMPILER(icc "intel C compiler")
	CMAKE_FORCE_CXX_COMPILER(icpc "intel C++ compiler")
	#SET(CMAKE_C_COMPILER "icc")
endif(ENABLE_INTEL)

40
#if(ENABLE_BOOST)
Naumann, Andreas's avatar
Naumann, Andreas committed
41 42
	SET(COMPILEFLAGS "${COMPILEFLAGS} -DHAVE_BOOST=1")
	find_package(Boost 1.42 REQUIRED)
43 44 45 46 47 48 49 50 51 52
        if(Boost_FOUND)
		include_directories(${Boost_INCLUDE_DIR})
		message("boost lib-dirs: ${Boost_LIBRARY_DIRS}")
		message("use the boost dir: ${Boost_INCLUDE_DIR}")
		if(WIN32)
			message("the windows find_boost does not set the boost library paths, please set it")
			SET(Boost_LIBRARY_DIRS CACHE PATH "The directory containing the boost libraries")
		endif(WIN32)		
		link_directories(${Boost_LIBRARY_DIRS})
	endif(Boost_FOUND)
53
#endif(ENABLE_BOOST)
Naumann, Andreas's avatar
Naumann, Andreas committed
54

Naumann, Andreas's avatar
Naumann, Andreas committed
55
SET(LIB_DIR ./lib)
56
SET(SOURCE_DIR ${AMDiS_SOURCE_DIR})
57 58 59 60 61 62 63 64 65 66 67
SET(AMDIS_SRC ${SOURCE_DIR}/DOFIndexed.cc 
	      ${SOURCE_DIR}/GNUPlotWriter.cc 
	      ${SOURCE_DIR}/VertexVector.cc 
	      ${SOURCE_DIR}/PeriodicBC.cc 
	      ${SOURCE_DIR}/Recovery.cc 
	      ${SOURCE_DIR}/RecoveryEstimator.cc 
	      ${SOURCE_DIR}/ResidualEstimator.cc 
	      ${SOURCE_DIR}/Cholesky.cc 
	      ${SOURCE_DIR}/AdaptBase.cc
	      ${SOURCE_DIR}/StandardProblemIteration.cc 
	      ${SOURCE_DIR}/ProblemScal.cc 
68 69
	      ${SOURCE_DIR}/ProblemVec.cc
	      ${SOURCE_DIR}/ProblemImplicit.cc 
70 71 72 73 74 75 76
	      ${SOURCE_DIR}/ProblemVecDbg.cc 
	      ${SOURCE_DIR}/DualTraverse.cc 
	      ${SOURCE_DIR}/ElementData.cc 
	      ${SOURCE_DIR}/ComponentTraverseInfo.cc 
	      ${SOURCE_DIR}/CreatorMap.cc 
	      ${SOURCE_DIR}/ProblemInterpolScal.cc 
	      ${SOURCE_DIR}/ProblemInterpolVec.cc 
77
              ${SOURCE_DIR}/MacroInfo.cc
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
	      ${SOURCE_DIR}/MacroReader.cc 
	      ${SOURCE_DIR}/ValueReader.cc 
	      ${SOURCE_DIR}/Projection.cc 
	      ${SOURCE_DIR}/SubAssembler.cc 
	      ${SOURCE_DIR}/ZeroOrderAssembler.cc 
	      ${SOURCE_DIR}/FirstOrderAssembler.cc 
	      ${SOURCE_DIR}/SecondOrderAssembler.cc 
	      ${SOURCE_DIR}/Assembler.cc 
	      ${SOURCE_DIR}/AdaptInfo.cc 
	      ${SOURCE_DIR}/Marker.cc 
	      ${SOURCE_DIR}/SurfaceQuadrature.cc 
	      ${SOURCE_DIR}/LeafData.cc 
	      ${SOURCE_DIR}/BoundaryManager.cc 
	      ${SOURCE_DIR}/DirichletBC.cc 
	      ${SOURCE_DIR}/RobinBC.cc  
	      ${SOURCE_DIR}/FileWriter.cc 
	      ${SOURCE_DIR}/ElementFileWriter.cc 
	      ${SOURCE_DIR}/ElInfo.cc 
	      ${SOURCE_DIR}/ElInfoStack.cc 
	      ${SOURCE_DIR}/OperatorTerm.cc 
              ${SOURCE_DIR}/ZeroOrderTerm.cc 
	      ${SOURCE_DIR}/FirstOrderTerm.cc 
	      ${SOURCE_DIR}/SecondOrderTerm.cc 
              ${SOURCE_DIR}/Operator.cc 
	      ${SOURCE_DIR}/Mesh.cc 
	      ${SOURCE_DIR}/MeshStructure.cc 
	      ${SOURCE_DIR}/AdaptStationary.cc  
	      ${SOURCE_DIR}/AdaptInstationary.cc
	      ${SOURCE_DIR}/DOFVector.cc 
	      ${SOURCE_DIR}/Estimator.cc 
	      ${SOURCE_DIR}/ProblemInstat.cc 
	      ${SOURCE_DIR}/ProblemNonLin.cc 
	      ${SOURCE_DIR}/NonLinUpdater.cc 
	      ${SOURCE_DIR}/QPsiPhi.cc 
	      ${SOURCE_DIR}/BasisFunction.cc 
	      ${SOURCE_DIR}/Boundary.cc 
	      ${SOURCE_DIR}/CoarseningManager.cc 
	      ${SOURCE_DIR}/CoarseningManager1d.cc 
	      ${SOURCE_DIR}/CoarseningManager2d.cc 
	      ${SOURCE_DIR}/CoarseningManager3d.cc 
	      ${SOURCE_DIR}/DOFAdmin.cc 
	      ${SOURCE_DIR}/DOFMatrix.cc 
	      ${SOURCE_DIR}/Element.cc 
	      ${SOURCE_DIR}/ElInfo1d.cc 
	      ${SOURCE_DIR}/ElInfo2d.cc 
	      ${SOURCE_DIR}/ElInfo3d.cc 
	      ${SOURCE_DIR}/FiniteElemSpace.cc 
	      ${SOURCE_DIR}/FixVec.cc 
	      ${SOURCE_DIR}/Global.cc 
	      ${SOURCE_DIR}/Lagrange.cc 
	      ${SOURCE_DIR}/Line.cc 
	      ${SOURCE_DIR}/MacroElement.cc 
	      ${SOURCE_DIR}/MacroWriter.cc 
	      ${SOURCE_DIR}/Parameters.cc 
	      ${SOURCE_DIR}/Parametric.cc 
	      ${SOURCE_DIR}/Quadrature.cc 
	      ${SOURCE_DIR}/RCNeighbourList.cc 
	      ${SOURCE_DIR}/RefinementManager.cc 
	      ${SOURCE_DIR}/RefinementManager1d.cc 
	      ${SOURCE_DIR}/RefinementManager2d.cc 
	      ${SOURCE_DIR}/RefinementManager3d.cc 
	      ${SOURCE_DIR}/Tetrahedron.cc 
	      ${SOURCE_DIR}/Traverse.cc 
	      ${SOURCE_DIR}/TraverseParallel.cc 
	      ${SOURCE_DIR}/Triangle.cc 
	      ${SOURCE_DIR}/TecPlotWriter.cc 
	      ${SOURCE_DIR}/ValueWriter.cc 
	      ${SOURCE_DIR}/VtkWriter.cc 
	      ${SOURCE_DIR}/PngWriter.cc 
	      ${SOURCE_DIR}/PovrayWriter.cc 
	      ${SOURCE_DIR}/DataCollector.cc 
	      ${SOURCE_DIR}/ScalableQuadrature.cc 
	      ${SOURCE_DIR}/SubElInfo.cc 
	      ${SOURCE_DIR}/parallel/InteriorBoundary.cc 
	      ${SOURCE_DIR}/ElementDofIterator.cc 
Naumann, Andreas's avatar
Naumann, Andreas committed
153
	      ${SOURCE_DIR}/Debug.cc
154 155
	      ${SOURCE_DIR}/ArhReader.cc
	      ${SOURCE_DIR}/ArhWriter.cc
156 157 158
              ${SOURCE_DIR}/time/RosenbrockAdaptInstationary.cc 
	      ${SOURCE_DIR}/time/RosenbrockStationary.cc 
	      ${SOURCE_DIR}/time/RosenbrockMethod.cc
Naumann, Andreas's avatar
Naumann, Andreas committed
159 160 161 162 163 164 165 166 167
	      )

if(ENABLE_PARMETIS)
	find_package(MPI REQUIRED)
	INCLUDE (CMakeForceCompiler)	
	CMAKE_FORCE_C_COMPILER(mpicc "MPI C compiler")
	CMAKE_FORCE_CXX_COMPILER(mpiCC "MPI C++ compiler")

	include_directories( ${LIB_DIR}/ParMetis-3.1)
168
        INSTALL(FILES ${LIB_DIR}/ParMetis-3.1/parmetis.h
169 170 171
		${LIB_DIR}/ParMetis-3.1/libparmetis.a
		${LIB_DIR}/ParMetis-3.1/libmetis.a
		DESTINATION lib/parmetis
172
	       )
Naumann, Andreas's avatar
Naumann, Andreas committed
173 174 175 176 177
endif(ENABLE_PARMETIS)

if(ENABLE_PARALLEL_DOMAIN)
	include_directories(${PETSC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/include)
	SET(PARALLEL_DOMAIN_AMDIS_SRC
178
                ${SOURCE_DIR}/parallel/ParMetisPartitioner.cc
179
		${SOURCE_DIR}/parallel/MeshDistributor.cc 
Naumann, Andreas's avatar
Naumann, Andreas committed
180
		${SOURCE_DIR}/parallel/StdMpi.cc
181
		${SOURCE_DIR}/parallel/ParallelDebug.cc
Naumann, Andreas's avatar
Naumann, Andreas committed
182
		${SOURCE_DIR}/parallel/GlobalMatrixSolver.cc
183 184
		${SOURCE_DIR}/parallel/MpiHelper.cc
		${SOURCE_DIR}/parallel/ElementObjectData.cc)
Naumann, Andreas's avatar
Naumann, Andreas committed
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
	SET(COMPILEFLAGS "${COMPILEFLAGS} -DHAVE_PARALLEL_DOMAIN_AMDIS=1")
endif(ENABLE_PARALLEL_DOMAIN)

if(ENABLE_DEBUG)
	SET(COMPILEFLAGS "${COMPILEFLAGS} -g -O0 -DDEBUG=1")
endif(ENABLE_DEBUG)

if(ENABLE_OPENMP)
	if(ENABLE_INTEL)
		SET(COMPILEFLAGS "${COMPILEFLAGS} -openmp")
	else(ENABLE_INTEL)
		SET(COMPILEFLAGS "${COMPILEFLAGS} -fopenmp")
	endif(ENABLE_INTEL)
endif(ENABLE_OPENMP)

if(ENABLE_UMFPACK)
	include_directories(${LIB_DIR}/UFconfig ${LIB_DIR}/AMD/Include ${LIB_DIR}/UMFPACK/Include)
	SET(COMPILEFLAGS "${COMPILEFLAGS} -DHAVE_UMFPACK=1 -DMTL_HAS_UMFPACK")
203
        FILE(GLOB UMFPACK_HEADERS "${LIB_DIR}/UMFPACK/Include/*.h")
204 205
	INSTALL(FILES ${UMFPACK_HEADERS} 
		DESTINATION include/amdis/umfpack/)
206

207
	FILE(GLOB UMFPACK_HEADERS "${LIB_DIR}/AMD/Include/*.h")
208 209
	INSTALL(FILES ${UMFPACK_HEADERS} 
		DESTINATION include/amdis/amd/)
210

211
	FILE(GLOB HEADERS "${LIB_DIR}/UFconfig/*.h")
212 213
	INSTALL(FILES ${HEADERS} 
		DESTINATION include/amdis/ufconfig/)
214

215
	FILE(GLOB HEADERS "${LIB_DIR}/UFconfig/xerbla/*.h")
216 217
	INSTALL(FILES ${HEADERS} 
		DESTINATION include/amdis/ufconfig/xerbla)
218

219 220 221 222 223
	INSTALL(FILES ${LIB_DIR}/UMFPACK/Lib/libumfpack.a 
		DESTINATION lib/amdis/umfpack/)
	INSTALL(FILES ${LIB_DIR}/AMD/Lib/libamd.a 
		DESTINATION lib/amdis/amd/)
	SET(RPM_DEPEND_STR "blas")
Naumann, Andreas's avatar
Naumann, Andreas committed
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243
endif(ENABLE_UMFPACK)

if(ENABLE_MKL)
	include_directories(${MKL_DIR})
	SET(COMPILEFLAGS "${COMPILEFLAGS} -DHAVE_MKL=1")
endif(ENABLE_MKL)

if(ENABLE_DUNE)
	include_directories(${DUNE_DIR})
	SET(COMPILEFLAGS "${COMPILEFLAGS} -DHAVE_DUNE=1")
endif(ENABLE_DUNE)

SET(COMPOSITE_SOURCE_DIR compositeFEM/src)
SET(COMPOSITE_FEM_SRC ${COMPOSITE_SOURCE_DIR}/CFE_Integration.cc ${COMPOSITE_SOURCE_DIR}/CFE_NormAndErrorFcts.cc 
		      ${COMPOSITE_SOURCE_DIR}/CompositeFEMMethods.cc ${COMPOSITE_SOURCE_DIR}/LevelSetAdaptMesh.cc 
		      ${COMPOSITE_SOURCE_DIR}/PenaltyOperator.cc ${COMPOSITE_SOURCE_DIR}/ElementLevelSet.cc 
		      ${COMPOSITE_SOURCE_DIR}/CompositeFEMOperator.cc ${COMPOSITE_SOURCE_DIR}/SubPolytope.cc 
		      ${COMPOSITE_SOURCE_DIR}/SubElementAssembler.cc )

#mtl4 includes
244
include_directories(${MTL_DIR})
Naumann, Andreas's avatar
Naumann, Andreas committed
245 246
include_directories(${SOURCE_DIR})

247
add_library(amdis SHARED ${AMDIS_SRC} ${PARALLEL_DOMAIN_AMDIS_SRC})
Naumann, Andreas's avatar
Naumann, Andreas committed
248
add_library(compositeFEM SHARED ${COMPOSITE_FEM_SRC})
249
target_link_libraries(compositeFEM amdis)
Naumann, Andreas's avatar
Naumann, Andreas committed
250

251 252 253
if(WIN32)
	SET(COMPILEFLAGS "${COMPILEFLAGS} -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS")
endif(WIN32)
254
message("compileflags: ${COMPILEFLAGS}")
Naumann, Andreas's avatar
Naumann, Andreas committed
255 256 257 258 259 260
SET_TARGET_PROPERTIES(amdis PROPERTIES COMPILE_FLAGS "${COMPILEFLAGS}")
if(ENABLE_MARMOT)
	Message("please set marmotcc manually")
endif(ENABLE_MARMOT)

install(TARGETS amdis compositeFEM 
261
	LIBRARY DESTINATION lib/amdis/ )
262 263

FILE(GLOB HEADERS "${AMDiS_SOURCE_DIR}/*.h")
264 265
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/)
266
FILE(GLOB HEADERS "${AMDiS_SOURCE_DIR}/*.hh")
267 268
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/)
269
FILE(GLOB HEADERS "${AMDiS_SOURCE_DIR}/parallel/*.h")
270 271
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/parallel/)
272
FILE(GLOB HEADERS "${AMDiS_SOURCE_DIR}/time/*.h")
273 274
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/time/)
275
FILE(GLOB HEADERS "${AMDiS_SOURCE_DIR}/itl/*.hpp")
276 277
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/itl)
278 279 280 281 282

configure_file(${AMDiS_BINARY_DIR}/AMDiSConfig.cmake.in
		${AMDiS_BINARY_DIR}/AMDiSConfig.cmake
		@ONLY
	      )
283 284 285 286
INSTALL(FILES ${AMDiS_BINARY_DIR}/AMDiSConfig.cmake 
	DESTINATION share/amdis/)
INSTALL(FILES ${AMDiS_BINARY_DIR}/AMDiSUse.cmake 
	DESTINATION share/amdis/)
Naumann, Andreas's avatar
Naumann, Andreas committed
287

288 289
#install mtl
INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/lib/mtl4/
290 291 292 293 294 295
	DESTINATION include/amdis/mtl4/
	FILES_MATCHING PATTERN "*.hpp"
	PATTERN ".svn" EXCLUDE
	PATTERN ".svn/*" EXCLUDE
	PATTERN "mtl4/libs" EXCLUDE
	PATTERN "mtl4/extern" EXCLUDE
296
       )
297 298

#PACKAGES
299 300 301 302 303 304 305 306 307
#let cmake look for the svn-version
find_package(Subversion)
if(Subversion_FOUND)
	Subversion_WC_INFO(${CMAKE_CURRENT_BINARY_DIR} mtlSubinfo)
	set(CurrentRevision ${mtlSubinfo_WC_REVISION})
#       message("current revision: ${mtlSubinfo_WC_REVISION}")
else(Subversion_FOUND)
	set(CurrentRevision "0")
endif(Subversion_FOUND)
Naumann, Andreas's avatar
Naumann, Andreas committed
308
set(CPACK_PACKAGE_NAME "AMDiS")
309
set(CPACK_PACKAGE_CONTACT "Andreas.Naumann@tu-dresden.de")
310
set(CPACK_PACKAGE_VERSION "0.9.${CurrentRevision}")
311 312 313 314
set(CPACK_GENERATOR "RPM" "DEB" "TGZ")
set(CPACK_INSTALL_PREFIX "/usr/")

set(CPACK_RPM_PACKAGE_REQUIRES "boost-devel >= 1.42, ${RPM_DEPEND_STR}")
Naumann, Andreas's avatar
Naumann, Andreas committed
315
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libboost-dev (>= 1.42)")
316
include(CPack)
Naumann, Andreas's avatar
Naumann, Andreas committed
317 318 319 320 321 322
if(ENABLE_TESTS)
#ENABLE_TESTING()
#add_test(demo_test run_test.sh)

#add_test(demo_test ${CMAKE_CTEST_COMMAND} --build-and-test "${CMAKE_SOURCE_DIR}/test/demo_test" "${CMAKE_BINARY_DIR}/test/demo_test" --build-generator "${CMAKE_GENERATOR}" --build-makeprogram "${CMAKE_MAKE_PROGRAM}" "${CMAKE_BINARY_DIR}/test/demo_test")
endif(ENABLE_TESTS)