CMakeLists.txt 10.9 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
8

#needs: --enable-debug, enable-intel --enable-openmp --enable-parmetis --enable-parallel-domain --enable-umfpack --enable-mkl --enable-boost --enable-marmot

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

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

Naumann, Andreas's avatar
Naumann, Andreas committed
15
16
17
18
19
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)
20
SET(PETSC_DIR "" CACHE PATH "Petsc directory for parallel domain decomposition" )
Naumann, Andreas's avatar
Naumann, Andreas committed
21
22
23
SET(PETSC_ARCH "" CACHE STRING "Petsc architecture")
option(ENABLE_UMFPACK "use umfpack solver" false)
option(ENABLE_MKL "use the mkl" false)
24
SET(MKL_DIR "" CACHE PATH "MKL directory")
Naumann, Andreas's avatar
Naumann, Andreas committed
25
option(ENABLE_DUNE "use dune" false)
26
SET(DUNE_DIR "" CACHE PATH "Dune directory")
27
#option(ENABLE_BOOST "use the boost library" false)
Naumann, Andreas's avatar
Naumann, Andreas committed
28
29
30
31
32
33
34
35
36
37
38
39
40
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)

41
#if(ENABLE_BOOST)
Naumann, Andreas's avatar
Naumann, Andreas committed
42
43
	SET(COMPILEFLAGS "${COMPILEFLAGS} -DHAVE_BOOST=1")
	find_package(Boost 1.42 REQUIRED)
44
45
46
47
48
49
50
51
52
53
        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)
54
#endif(ENABLE_BOOST)
Naumann, Andreas's avatar
Naumann, Andreas committed
55

Naumann, Andreas's avatar
Naumann, Andreas committed
56
SET(LIB_DIR ./lib)
57
SET(SOURCE_DIR ${AMDiS_SOURCE_DIR})
58
59
60
61
62
63
64
65
66
67
68
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 
69
70
	      ${SOURCE_DIR}/ProblemVec.cc
	      ${SOURCE_DIR}/ProblemImplicit.cc 
71
72
73
74
75
76
77
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}/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 
	      ${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
156
              ${SOURCE_DIR}/time/RosenbrockAdaptInstationary.cc 
	      ${SOURCE_DIR}/time/RosenbrockStationary.cc 
	      ${SOURCE_DIR}/time/RosenbrockMethod.cc
Naumann, Andreas's avatar
Naumann, Andreas committed
157
158
159
160
161
162
163
164
165
166
167
168
169
	      )

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)
	SET(PARALLEL_AMDIS_SRC  ${SOURCE_DIR}/ConditionalEstimator.cc ${SOURCE_DIR}/ConditionalMarker.cc 
				${SOURCE_DIR}/ParallelProblem.cc ${SOURCE_DIR}/ParMetisPartitioner.cc 
				${SOURCE_DIR}/PollutionError.cc)
	SET(COMPILEFLAGS "${COMPILEFLAGS} -DHAVE_PARALLEL_AMDIS=1")
170
        INSTALL(FILES ${LIB_DIR}/ParMetis-3.1/parmetis.h
171
172
173
174
			${LIB_DIR}/ParMetis-3.1/libparmetis.a
			${LIB_DIR}/ParMetis-3.1/libmetis.a
			DESTINATION amdis/parmetis
	       )
Naumann, Andreas's avatar
Naumann, Andreas committed
175
176
177
178
179
endif(ENABLE_PARMETIS)

if(ENABLE_PARALLEL_DOMAIN)
	include_directories(${PETSC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/include)
	SET(PARALLEL_DOMAIN_AMDIS_SRC
180
		${SOURCE_DIR}/parallel/MeshDistributor.cc 
Naumann, Andreas's avatar
Naumann, Andreas committed
181
		${SOURCE_DIR}/parallel/StdMpi.cc
182
		${SOURCE_DIR}/parallel/ParallelDebug.cc
Naumann, Andreas's avatar
Naumann, Andreas committed
183
		${SOURCE_DIR}/parallel/GlobalMatrixSolver.cc
184
185
		${SOURCE_DIR}/parallel/MpiHelper.cc
		${SOURCE_DIR}/parallel/ElementObjectData.cc)
Naumann, Andreas's avatar
Naumann, Andreas committed
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
	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")
204
205
        FILE(GLOB UMFPACK_HEADERS "${LIB_DIR}/UMFPACK/Include/*.h")
	INSTALL(FILES ${UMFPACK_HEADERS} DESTINATION amdis/umfpack/include)
206

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

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

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

216
217
	INSTALL(FILES ${LIB_DIR}/UMFPACK/Lib/libumfpack.a DESTINATION amdis/umfpack/)
	INSTALL(FILES ${LIB_DIR}/AMD/Lib/libamd.a DESTINATION amdis/amd/)
Naumann, Andreas's avatar
Naumann, Andreas committed
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
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
238
include_directories(${MTL_DIR})
Naumann, Andreas's avatar
Naumann, Andreas committed
239
240
241
242
include_directories(${SOURCE_DIR})

add_library(amdis SHARED ${AMDIS_SRC} ${PARALLEL_AMDIS_SRC} ${PARALLEL_DOMAIN_AMDIS_SRC})
add_library(compositeFEM SHARED ${COMPOSITE_FEM_SRC})
243
target_link_libraries(compositeFEM amdis)
Naumann, Andreas's avatar
Naumann, Andreas committed
244

245
246
247
if(WIN32)
	SET(COMPILEFLAGS "${COMPILEFLAGS} -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS")
endif(WIN32)
248
message("compileflags: ${COMPILEFLAGS}")
Naumann, Andreas's avatar
Naumann, Andreas committed
249
250
251
252
253
254
SET_TARGET_PROPERTIES(amdis PROPERTIES COMPILE_FLAGS "${COMPILEFLAGS}")
if(ENABLE_MARMOT)
	Message("please set marmotcc manually")
endif(ENABLE_MARMOT)

install(TARGETS amdis compositeFEM 
255
256
257
258
259
260
261
262
263
264
	LIBRARY DESTINATION amdis/lib )

FILE(GLOB HEADERS "${AMDiS_SOURCE_DIR}/*.h")
INSTALL(FILES ${HEADERS} DESTINATION amdis/include)
FILE(GLOB HEADERS "${AMDiS_SOURCE_DIR}/*.hh")
INSTALL(FILES ${HEADERS} DESTINATION amdis/include)
FILE(GLOB HEADERS "${AMDiS_SOURCE_DIR}/parallel/*.h")
INSTALL(FILES ${HEADERS} DESTINATION amdis/include/parallel/)
FILE(GLOB HEADERS "${AMDiS_SOURCE_DIR}/time/*.h")
INSTALL(FILES ${HEADERS} DESTINATION amdis/include/time/)
265
266
FILE(GLOB HEADERS "${AMDiS_SOURCE_DIR}/itl/*.hpp")
INSTALL(FILES ${HEADERS} DESTINATION amdis/include/itl)
267
268
269
270
271
272
273

configure_file(${AMDiS_BINARY_DIR}/AMDiSConfig.cmake.in
		${AMDiS_BINARY_DIR}/AMDiSConfig.cmake
		@ONLY
	      )
INSTALL(FILES ${AMDiS_BINARY_DIR}/AMDiSConfig.cmake DESTINATION amdis/)
INSTALL(FILES ${AMDiS_BINARY_DIR}/AMDiSUse.cmake DESTINATION amdis/)
Naumann, Andreas's avatar
Naumann, Andreas committed
274

275
276
277
278
279
280
281
#install mtl
INSTALL(DIRECTORY ${CMAKE_BINARY_DIR}/lib/mtl4/
		DESTINATION amdis/mtl4
		FILES_MATCHING PATTERN "*.hpp"
		PATTERN ".svn" EXCLUDE
		PATTERN ".svn/*" EXCLUDE
       )
Naumann, Andreas's avatar
Naumann, Andreas committed
282
283
284
285
if(ENABLE_GUI)
	add_subdirectory(other/tools/amdis_gui)
endif(ENABLE_GUI)

286
287
288
289
290
291
set(CPACK_PACKAGE_CONTACT "Me")
set(CPACK_BINARY_DEB "on")
set(CPACK_BINARY_RPM "on")
#set(CPACK_SET_DESTDIR "true")
set(CPACK_INSTALL_PREFIX "")
include(CPack)
Naumann, Andreas's avatar
Naumann, Andreas committed
292
293
294
295
296
297
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)