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

3
cmake_minimum_required(VERSION 2.6)
4
cmake_policy(SET CMP0017 OLD)
Naumann, Andreas's avatar
Naumann, Andreas committed
5
6
7
8
if(POLICY CMP0042)
	cmake_policy(SET CMP0042 NEW)
endif()
	
9
10
SET(LIB_DIR ${AMDIS_SOURCE_DIR}/lib)
SET(SOURCE_DIR ${AMDIS_SOURCE_DIR}/src)
11

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

15
16
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DDEBUG=0") #-Wno-unused-but-set-variable
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG=1 -O0") #-Wno-unused-but-set-variable
17
18
19
20
21
22
23
24
25
26
27
28
29
30
if(NOT CurrentRevision)
	find_package(Subversion)
	if(Subversion_FOUND)
	  Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} svn_info)
	  #message("svn-rev: ${svn_info_WC_REVISION}")
	  set(CurrentRevision "0.9.${svn_info_WC_REVISION}")
	endif()
endif()
if(NOT AMDIS_MAJOR)
  set(AMDIS_MAJOR "0")
endif()
if(NOT AMDIS_MINOR)
  set(AMDIS_MINOR "9")
endif()
31
list(APPEND COMPILEFLAGS "-DAMDIS_VERSION=${CurrentRevision}")
32
33
34
35
36
37

#define the build type, empty can be everything and nothing
if(CMAKE_BUILD_TYPE STREQUAL "")
	set(CMAKE_BUILD_TYPE "Release")
endif()

38
39
if(CMAKE_CXX_COMPILER MATCHES ".*icpc")
	Message("Compiler: Intel")
40
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -diag-disable 654 -diag-disable 858") 
41
42
endif()

Thomas Witkowski's avatar
Blub  
Thomas Witkowski committed
43

44
SET(ENABLE_PARALLEL_DOMAIN "OFF" CACHE STRING "use parallel domain decomposition. please set to one of: PMTL, PETSC, OFF" )
Naumann, Andreas's avatar
Naumann, Andreas committed
45
46
option(USE_PETSC_DEV false)
option(ENABLE_ZOLTAN false)
Praetorius, Simon's avatar
Praetorius, Simon committed
47
option(ENABLE_CXX11 "Enable C++11 compiler features" false)
48
option(ENABLE_SEQ_PETSC "Use sequential PETSc solvers" false)
49
option(ENABLE_UMFPACK "Use of UMFPACK solver" false)
50
option(ENABLE_HYPRE "Use HYPRE AMG solver" false)
Praetorius, Simon's avatar
Praetorius, Simon committed
51
option(ENABLE_PNG "use png reader/writer" false)
52
option(ENABLE_BDDCML "Use of BDDCML library" false)
53
option(ENABLE_EXTENSIONS "Use extensions" false)
Thomas Witkowski's avatar
Blub  
Thomas Witkowski committed
54
option(ENABLE_OPENMP "Use OpenMP" false)
55
option(ENABLE_COMPRESSION "Use output compression" false)
56
option(ENABLE_OUTPUT "AMDiS output printing, disable only for debugging!" true)
Thomas Witkowski's avatar
Blub  
Thomas Witkowski committed
57
58
59


mark_as_advanced(ENABLE_OUTPUT)
60
61
mark_as_advanced(ENABLE_BDDCML)
mark_as_advanced(USE_PETSC_DEV)
Thomas Witkowski's avatar
Blub  
Thomas Witkowski committed
62

Naumann, Andreas's avatar
Naumann, Andreas committed
63

64
find_package(Boost 1.44 REQUIRED)
65
if(Boost_FOUND)
66
  list(APPEND AMDIS_INCLUDE_DIRS ${Boost_INCLUDE_DIR})
67
68
69
70
71
  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")
72
  endif(WIN32)
73
  list(APPEND AMDIS_LINK_DIRS ${Boost_LIBRARY_DIRS})
74
endif(Boost_FOUND)
Naumann, Andreas's avatar
Naumann, Andreas committed
75

76

Thomas Witkowski's avatar
Thomas Witkowski committed
77
78
SET(AMDIS_SRC ${SOURCE_DIR}/AdaptBase.cc
	      ${SOURCE_DIR}/AdaptInfo.cc
79
	      ${SOURCE_DIR}/AdaptInstationary.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
80
	      ${SOURCE_DIR}/AdaptStationary.cc
81
	      ${SOURCE_DIR}/AMDiS.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
82
83
84
85
	      ${SOURCE_DIR}/Assembler.cc
	      ${SOURCE_DIR}/BasisFunction.cc
	      ${SOURCE_DIR}/Boundary.cc
	      ${SOURCE_DIR}/BoundaryManager.cc
86
	      ${SOURCE_DIR}/BoundaryObject.cc
87
	      ${SOURCE_DIR}/Bubble.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
88
89
90
91
92
93
	      ${SOURCE_DIR}/Cholesky.cc
	      ${SOURCE_DIR}/CoarseningManager.cc
	      ${SOURCE_DIR}/CoarseningManager1d.cc
	      ${SOURCE_DIR}/CoarseningManager2d.cc
	      ${SOURCE_DIR}/CoarseningManager3d.cc
	      ${SOURCE_DIR}/ComponentTraverseInfo.cc
94
	      ${SOURCE_DIR}/CouplingIterationInterface.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
95
96
97
98
99
	      ${SOURCE_DIR}/CreatorMap.cc
	      ${SOURCE_DIR}/DOFAdmin.cc
	      ${SOURCE_DIR}/DOFIndexed.cc
	      ${SOURCE_DIR}/DOFMatrix.cc
	      ${SOURCE_DIR}/DOFVector.cc
Naumann, Andreas's avatar
Naumann, Andreas committed
100
	      ${SOURCE_DIR}/Debug.cc
101
	      ${SOURCE_DIR}/DirichletBC.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
102
103
104
105
106
107
108
109
110
	      ${SOURCE_DIR}/DualTraverse.cc
	      ${SOURCE_DIR}/ElInfo.cc
	      ${SOURCE_DIR}/ElInfo1d.cc
	      ${SOURCE_DIR}/ElInfo2d.cc
	      ${SOURCE_DIR}/ElInfo3d.cc
	      ${SOURCE_DIR}/ElInfoStack.cc
	      ${SOURCE_DIR}/Element.cc
	      ${SOURCE_DIR}/ElementData.cc
	      ${SOURCE_DIR}/ElementDofIterator.cc
111
	      ${SOURCE_DIR}/ElementRegion_ED.cc	
Thomas Witkowski's avatar
Thomas Witkowski committed
112
113
114
115
116
117
118
	      ${SOURCE_DIR}/FiniteElemSpace.cc
	      ${SOURCE_DIR}/FirstOrderAssembler.cc
	      ${SOURCE_DIR}/FirstOrderTerm.cc
	      ${SOURCE_DIR}/FixVec.cc
	      ${SOURCE_DIR}/Global.cc
	      ${SOURCE_DIR}/GlobalDOFNumbering.cc
	      ${SOURCE_DIR}/GlobalElementNumbering.cc
119
	      ${SOURCE_DIR}/Initfile.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
120
121
122
123
124
	      ${SOURCE_DIR}/Lagrange.cc
	      ${SOURCE_DIR}/LeafData.cc
	      ${SOURCE_DIR}/Line.cc
	      ${SOURCE_DIR}/MacroElement.cc
	      ${SOURCE_DIR}/Marker.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
125
	      ${SOURCE_DIR}/MatrixVector.cc
126
# 	      ${SOURCE_DIR}/Test_MatrixVectorOperations.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
127
128
129
130
131
132
	      ${SOURCE_DIR}/Mesh.cc
	      ${SOURCE_DIR}/MeshStructure.cc
	      ${SOURCE_DIR}/Operator.cc
	      ${SOURCE_DIR}/OperatorTerm.cc
	      ${SOURCE_DIR}/Parametric.cc
	      ${SOURCE_DIR}/PeriodicBC.cc
133
	      #${SOURCE_DIR}/ProblemImplicit.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
134
	      ${SOURCE_DIR}/ProblemInstat.cc
135
136
137
	      ${SOURCE_DIR}/ProblemInterpol.cc
	      ${SOURCE_DIR}/ProblemStat.cc
	      ${SOURCE_DIR}/ProblemStatDbg.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
138
139
140
141
142
143
144
145
146
147
148
149
150
151
	      ${SOURCE_DIR}/Projection.cc
	      ${SOURCE_DIR}/QPInfo.cc
	      ${SOURCE_DIR}/QPsiPhi.cc
	      ${SOURCE_DIR}/Quadrature.cc
	      ${SOURCE_DIR}/RCNeighbourList.cc
	      ${SOURCE_DIR}/Recovery.cc
	      ${SOURCE_DIR}/RefinementManager.cc
	      ${SOURCE_DIR}/RefinementManager1d.cc
	      ${SOURCE_DIR}/RefinementManager2d.cc
	      ${SOURCE_DIR}/RefinementManager3d.cc
	      ${SOURCE_DIR}/RobinBC.cc
	      ${SOURCE_DIR}/ScalableQuadrature.cc
	      ${SOURCE_DIR}/SecondOrderAssembler.cc
	      ${SOURCE_DIR}/SecondOrderTerm.cc
152
	      ${SOURCE_DIR}/Serializer.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
153
154
155
156
157
	      ${SOURCE_DIR}/StandardProblemIteration.cc
	      ${SOURCE_DIR}/SubAssembler.cc
	      ${SOURCE_DIR}/SubElInfo.cc
	      ${SOURCE_DIR}/SubQuadrature.cc
	      ${SOURCE_DIR}/SurfaceQuadrature.cc
158
159
	      ${SOURCE_DIR}/SurfaceRegion_ED.cc
	      ${SOURCE_DIR}/SystemVector.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
160
	      ${SOURCE_DIR}/Tetrahedron.cc
Naumann, Andreas's avatar
Naumann, Andreas committed
161
	      ${SOURCE_DIR}/Timer.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
162
163
164
165
166
	      ${SOURCE_DIR}/Traverse.cc
	      ${SOURCE_DIR}/Triangle.cc
	      ${SOURCE_DIR}/VertexVector.cc
	      ${SOURCE_DIR}/ZeroOrderAssembler.cc
	      ${SOURCE_DIR}/ZeroOrderTerm.cc
167
168
169
170
	      ${SOURCE_DIR}/est/Estimator.cc
	      ${SOURCE_DIR}/est/RecoveryEstimator.cc
	      ${SOURCE_DIR}/est/ResidualEstimator.cc
	      ${SOURCE_DIR}/est/SimpleResidualEstimator.cc
171
	      ${SOURCE_DIR}/io/ArhReader.cc
172
173
	      ${SOURCE_DIR}/io/detail/ArhReader.cc
              ${SOURCE_DIR}/io/Arh2Reader.cc
174
              ${SOURCE_DIR}/io/Arh2Writer.cc
Siqi Ling's avatar
Siqi Ling committed
175
176
              ${SOURCE_DIR}/io/Arh3Reader.cc
              ${SOURCE_DIR}/io/Arh3Writer.cc
177
178
179
              ${SOURCE_DIR}/io/detail/Arh2Reader.cc
	      ${SOURCE_DIR}/io/detail/ArhWriter.cc
              ${SOURCE_DIR}/io/detail/Arh2Writer.cc
Siqi Ling's avatar
Siqi Ling committed
180
181
              ${SOURCE_DIR}/io/detail/Arh3Reader.cc
              ${SOURCE_DIR}/io/detail/Arh3Writer.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
182
183
	      ${SOURCE_DIR}/io/DofWriter.cc
	      ${SOURCE_DIR}/io/ElementFileWriter.cc
184
	      ${SOURCE_DIR}/io/FileWriterInterface.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
185
186
187
188
189
	      ${SOURCE_DIR}/io/FileWriter.cc
	      ${SOURCE_DIR}/io/GNUPlotWriter.cc
	      ${SOURCE_DIR}/io/MacroInfo.cc
	      ${SOURCE_DIR}/io/MacroReader.cc
	      ${SOURCE_DIR}/io/MacroWriter.cc
Praetorius, Simon's avatar
Praetorius, Simon committed
190
	      ${SOURCE_DIR}/io/PngReader.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
191
192
	      ${SOURCE_DIR}/io/PngWriter.cc
	      ${SOURCE_DIR}/io/PovrayWriter.cc
193
	      ${SOURCE_DIR}/io/Spreadsheet.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
194
195
196
	      ${SOURCE_DIR}/io/ValueReader.cc
	      ${SOURCE_DIR}/io/ValueWriter.cc
	      ${SOURCE_DIR}/io/VtkWriter.cc
197
	      ${SOURCE_DIR}/io/VtkVectorWriter.cc
198
              ${SOURCE_DIR}/io/detail/VtkWriter.cc
199
	      ${SOURCE_DIR}/nonlin/ProblemNonLin.cc
200
	      ${SOURCE_DIR}/solver/SolverMatrix.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
201
	      ${SOURCE_DIR}/time/RosenbrockAdaptInstationary.cc
202
	      ${SOURCE_DIR}/time/RosenbrockMethod.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
203
	      ${SOURCE_DIR}/time/RosenbrockStationary.cc
Naumann, Andreas's avatar
Naumann, Andreas committed
204
	      )
Praetorius, Simon's avatar
Praetorius, Simon committed
205
	      
206
if(ENABLE_PARALLEL_DOMAIN)
207
208
209
	
	### Search for MPI compiler and get compile flags and include paths. ###

Naumann, Andreas's avatar
Naumann, Andreas committed
210
	find_package(MPI REQUIRED)
211
	if(MPI_FOUND)
212
	  list(APPEND COMPILEFLAGS "${MPI_COMPILE_FLAGS}")
213
214
	  include_directories(${MPI_INCLUDE_PATH})
	endif(MPI_FOUND)
215
 
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239


	### Search for ParMetis ###

	find_file(PARMETIS_HEADER_FILE "parmetis.h" PATH ENV CPATH)
	if(PARMETIS_HEADER_FILE)
		get_filename_component(PARMETIS_INCLUDE_PATH "${PARMETIS_HEADER_FILE}" PATH CACHE)
		include_directories(${PARMETIS_INCLUDE_PATH})
	else()
		message(FATAL_ERROR "Could not find ParMetis header file!")
	endif(PARMETIS_HEADER_FILE)

	find_file(PARMETIS_LIB_FILE "libparmetis.a" PATH ENV LIBRARY_PATH)
	if(PARMETIS_LIB_FILE)
		get_filename_component(PARMETIS_LINK_PATH "${PARMETIS_LIB_FILE}" PATH CACHE)
		link_directories(${PARMETIS_LINK_PATH})
	else()
		message(FATAL_ERROR "Could not find ParMetis library file!")
	endif(PARMETIS_LIB_FILE)


	
	### Search for Zoltan ###

240
	if(ENABLE_ZOLTAN)
241
242
	  find_file(ZOLTAN_HEADER_FILE "zoltan_cpp.h" PATH ENV CPATH)
	  if(ZOLTAN_HEADER_FILE)
243
		get_filename_component(ZOLTAN_HEADER_DIR "${ZOLTAN_HEADER_FILE}" PATH CACHE)
244
		include_directories(${ZOLTAN_HEADER_DIR})
245
	  else()
246
247
248
		message(FATAL_ERROR "Could not find Zoltan include file!")
	  endif(ZOLTAN_HEADER_FILE)

249
	  list(APPEND COMPILEFLAGS "-DHAVE_ZOLTAN")
250
251
	endif(ENABLE_ZOLTAN)

252
253


254
	list(APPEND COMPILEFLAGS "-DHAVE_PARALLEL_DOMAIN_AMDIS=1")
Naumann, Andreas's avatar
Naumann, Andreas committed
255
	SET(PARALLEL_DOMAIN_AMDIS_SRC
256
		${SOURCE_DIR}/parallel/BddcMlSolver.cc
257
               	${SOURCE_DIR}/parallel/DofComm.cc
258
		${SOURCE_DIR}/parallel/CheckerPartitioner.cc
259
		${SOURCE_DIR}/parallel/ElementObjectDatabase.cc
260
		${SOURCE_DIR}/parallel/InteriorBoundary.cc
261
		${SOURCE_DIR}/parallel/MeshDistributor.cc 
262
		${SOURCE_DIR}/parallel/MeshLevelData.cc 
263
		${SOURCE_DIR}/parallel/MeshManipulation.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
264
		${SOURCE_DIR}/parallel/MeshPartitioner.cc
265
		${SOURCE_DIR}/parallel/MpiHelper.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
266
		${SOURCE_DIR}/parallel/ParallelDebug.cc
267
		${SOURCE_DIR}/parallel/ParallelDofMapping.cc
268
269
		${SOURCE_DIR}/parallel/ParallelProblemStat.cc
		${SOURCE_DIR}/parallel/ParallelSolver.cc
270
		${SOURCE_DIR}/parallel/PeriodicMap.cc
271
		${SOURCE_DIR}/parallel/ParMetisPartitioner.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
272
		${SOURCE_DIR}/parallel/StdMpi.cc
273
		${SOURCE_DIR}/parallel/ZoltanPartitioner.cc)
274
275
276
277
278
279
		
	if(ENABLE_PARALLEL_DOMAIN STREQUAL "PETSC")
		set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};/usr/share/cmake-2.8/Modules/;${CMAKE_SOURCE_DIR}/")
		set(PETSC_EXECUTABLE_RUNS ON)
		find_package(PETSc REQUIRED)
		include_directories(${PETSC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/include)
280
		list(APPEND COMPILEFLAGS "-DHAVE_PARALLEL_PETSC" "-DPETSC_VERSION=${PETSC_VERSION}")
281
		list(APPEND AMDIS_INCLUDE_DIRS ${PETSC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/include)
282
		list(APPEND PARALLEL_DOMAIN_AMDIS_SRC 
283
			${SOURCE_DIR}/parallel/MatrixNnzStructure.cc
284
			${SOURCE_DIR}/parallel/ParallelCoarseSpaceSolver.cc
285
			${SOURCE_DIR}/parallel/PetscHelper.cc
Thomas Witkowski's avatar
Thomas Witkowski committed
286
			${SOURCE_DIR}/parallel/PetscSolver.cc
287
			${SOURCE_DIR}/parallel/PetscSolverFeti.cc
288
289
			${SOURCE_DIR}/parallel/PetscSolverFetiDebug.cc
			${SOURCE_DIR}/parallel/PetscSolverFetiMonitor.cc
290
291
			${SOURCE_DIR}/parallel/PetscSolverFetiOperators.cc
			${SOURCE_DIR}/parallel/PetscSolverFetiTimings.cc
292
			${SOURCE_DIR}/parallel/PetscSolverGlobalMatrix.cc
293
			${SOURCE_DIR}/parallel/PetscSolverGlobalBlockMatrix.cc
294
			${SOURCE_DIR}/parallel/PetscSolverNavierStokes.cc
Praetorius, Simon's avatar
Praetorius, Simon committed
295
			${SOURCE_DIR}/parallel/PetscSolverNSCH.cc
296
297
298
299
			${SOURCE_DIR}/parallel/PetscSolverCahnHilliard2.cc
			${SOURCE_DIR}/parallel/PetscSolverCahnHilliard.cc                        
			${SOURCE_DIR}/parallel/PetscSolverSchur.cc
			${SOURCE_DIR}/solver/PetscTypes.cc)
300
301
302
303
	elseif(ENABLE_PARALLEL_DOMAIN STREQUAL "PMTL")
		set(MTL_INCLUDE_DIR "")
		find_package(MTL REQUIRED)
		list(APPEND COMPILEFLAGS "-DMTL_HAS_MPI" "-DHAVE_PARALLEL_MTL4")
304
305
306
# 		list(APPEND PARALLEL_DOMAIN_AMDIS_SRC 
# 			${SOURCE_DIR}/parallel/PMTL_ProblemStat.cc
# 			)
307
		list(APPEND AMDIS_LIBS ${MTL_LIBRARIES})
308
	else()
309
		message(SEND_ERROR "Set the domain-decomposition version correctly.")
310
311
	endif()

312
313
	INSTALL(FILES ResolveCompilerPaths.cmake FindPackageMultipass.cmake FindPETSc.cmake
		DESTINATION share/amdis/)
314
	if(USE_PETSC_DEV)
315
	  list(APPEND COMPILEFLAGS "-DHAVE_PETSC_DEV")
Naumann, Andreas's avatar
Naumann, Andreas committed
316
	endif( USE_PETSC_DEV)
Naumann, Andreas's avatar
Naumann, Andreas committed
317
318
endif(ENABLE_PARALLEL_DOMAIN)

319

320
if(ENABLE_SEQ_PETSC)
321
322
323
324
325
326
327
328
329
330
331
  find_package(MPI REQUIRED)
  if(MPI_FOUND)
    list(APPEND COMPILEFLAGS "${MPI_COMPILE_FLAGS}")
    include_directories(${MPI_INCLUDE_PATH})
  endif(MPI_FOUND)
	
  set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};/usr/share/cmake-2.8/Modules/;${CMAKE_SOURCE_DIR}/")
  set(PETSC_EXECUTABLE_RUNS ON)
  find_package(PETSc REQUIRED)
  include_directories(${PETSC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/include)
  list(APPEND AMDIS_INCLUDE_DIRS ${PETSC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/include)
332
  list(APPEND COMPILEFLAGS "-DHAVE_SEQ_PETSC" "-DPETSC_VERSION=${PETSC_VERSION}")
333
334
335
336
  
  list(APPEND AMDIS_SRC   
	${SOURCE_DIR}/solver/PetscSolver.cc
	${SOURCE_DIR}/solver/PetscTypes.cc)
337
endif(ENABLE_SEQ_PETSC)
338
339

if(ENABLE_UMFPACK)
340
	find_file(UMFPACK_H umfpack.h
341
			    HINTS ENV CPATH /usr/include /usr/include/suitesparse /usr/include/ufsparse
342
343
			    DOC "headerfile umfpack.h for UMFPACK")
	if(UMFPACK_H)
344
345
		get_filename_component(UMFPACK_PATH ${UMFPACK_H} PATH)
		include_directories(${UMFPACK_PATH} ${UFCONFIG_PATH} ${AMD_PATH})
346
		list(APPEND COMPILEFLAGS "-DHAVE_UMFPACK=1" "-DMTL_HAS_UMFPACK")
347
	else()
Praetorius, Simon's avatar
Praetorius, Simon committed
348
		message(FATAL_ERROR "Could not find the UMFPACK header umfpack.h.")
349
	endif()
350
	SET(RPM_DEPEND_STR "blas")
Naumann, Andreas's avatar
Naumann, Andreas committed
351
endif(ENABLE_UMFPACK)
Praetorius, Simon's avatar
Praetorius, Simon committed
352
353


354
if(ENABLE_HYPRE)
355
  include(HYPREConfig.cmake)
356
  message("have hypre: ${HAVE_HYPRE}")
357
358
  if (HAVE_HYPRE)
    if (NOT MPI_FOUND)
359
      find_package(MPI REQUIRED)
360
      if (MPI_FOUND)
361
362
363
364
365
366
367
368
369
370
371
	list(APPEND COMPILEFLAGS "${MPI_COMPILE_FLAGS}")
	include_directories(${MPI_INCLUDE_PATH})
      endif()
    endif()
    include_directories(${HYPRE_INCLUDE_DIRECTORIES})
    list(APPEND COMPILEFLAGS "-DMTL_HAS_HYPRE")
    list(APPEND MYLIBS ${HYPRE_LIBRARIES} )
  endif()
endif(ENABLE_HYPRE)
  
  
Praetorius, Simon's avatar
Praetorius, Simon committed
372
373
374
375
376
377
378
379
380
381
382
383
if(ENABLE_PNG)
	find_file(PNG_H png.h
			    HINTS ENV CPATH /usr/include
			    DOC "headerfile png.h for PNG-READER")
	if(PNG_H)
		get_filename_component(PNG_PATH ${PNG_H} PATH)
		include_directories(${PNG_PATH})
		list(APPEND COMPILEFLAGS "-DHAVE_PNG=1")
	else()
		message(FATAL_ERROR "Could not find the PNG header png.h.")
	endif()
endif(ENABLE_PNG)
Naumann, Andreas's avatar
Naumann, Andreas committed
384

385
386
387
if(ENABLE_COMPRESSION)
  list(APPEND COMPILEFLAGS "-DHAVE_COMPRESSION=1")
endif(ENABLE_COMPRESSION)
388

Thomas Witkowski's avatar
Blub  
Thomas Witkowski committed
389
390
391
392
393
394
if(NOT ENABLE_OUTPUT)
       message(WARNING "AMDiS cout output disabled!")
       list(APPEND COMPILEFLAGS "-DSUPPRESS_OUTPUT")
endif(NOT ENABLE_OUTPUT)


395
if(ENABLE_BDDCML)
396
397
	SET(BDDCML_LINK_LIST "" CACHE STRING "Further libraries to be linked with BDDCML")
		
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
	find_file(BDDCML_H bddcml_interface_c.h
			   HINTS ENV CPATH
			   DOC "Header bddcml_interface_c.h for the BDDCML library.")

	if(BDDCML_H)
		get_filename_component(BDDCML_PATH ${BDDCML_H} PATH)
		include_directories(${BDDCML_PATH})		
		list(APPEND COMPILEFLAGS "-DHAVE_BDDC_ML=1")
		list(APPEND COMPILEFLAGS "-DAdd_")
	else()
		message(FATAL_ERROR "Could not find BDDCML headers.")
	endif()

	find_library(BDDCML_LIB bddcml
				HINTS ENV LIBRARY_PATH
				DOC "BDDCML library")

	if(BDDCML_LIB)
		list(APPEND AMDIS_LIBS ${BDDCML_LIB})
	else()
		message(FATAL_ERROR "Could not find the BDDCML library")
	endif()
420

Thomas Witkowski's avatar
Thomas Witkowski committed
421
422
423
424

	find_file(BLOPEX_PATH blopex
			      HINTS ENV CPATH
			      DOC "Path to BLOPEX library.")
425
426
427
endif(ENABLE_BDDCML)


428
if(ENABLE_EXTENSIONS)
429
  option(ENABLE_BASE_PROBLEMS "Use base_problems" false)
430
431
432
433
434
435
  find_path(EXTENSIONS_DIR NAMES ${SOURCE_DIR}/../../extensions/Helpers.h DOC "Path to AMDiS extensions.")
  if (EXTENSIONS_DIR)
    if (NOT EXISTS ${EXTENSIONS_DIR}/Helpers.h OR NOT EXISTS ${EXTENSIONS_DIR}/base_problems/BaseProblem.h)
      message(FATAL_ERROR "Wrong extensions directory! Directory must contain the 'Helpers.h' and the subdirectory 'base_problems'")
    else()
  
436
437
438
439
440
      SET(EXTENSIONS_SRC
	      ${EXTENSIONS_DIR}/Helpers.cc
	      ${EXTENSIONS_DIR}/BackgroundMesh.cc
	      ${EXTENSIONS_DIR}/GeometryTools.cc
	      ${EXTENSIONS_DIR}/POperators.cc
441
	      ${EXTENSIONS_DIR}/SingularDirichletBC2.cc
442
	      ${EXTENSIONS_DIR}/time/ExtendedRosenbrockStationary.cc
443
	      ${EXTENSIONS_DIR}/pugixml/src/pugixml.cpp)
444
	      
445
      if(ENABLE_SEQ_PETSC)
446
447
	list(APPEND EXTENSIONS_SRC
	      ${EXTENSIONS_DIR}/preconditioner/PetscPreconPfc.cc
448
	      ${EXTENSIONS_DIR}/preconditioner/PetscPreconPfcDiag.cc
449
	      ${EXTENSIONS_DIR}/preconditioner/PetscPreconCahnHilliard.cc)
450
      endif(ENABLE_SEQ_PETSC)
451
      
452
453
      if(ENABLE_PARALLEL_DOMAIN)
	list(APPEND EXTENSIONS_SRC
Praetorius, Simon's avatar
Praetorius, Simon committed
454
# 	      ${EXTENSIONS_DIR}/preconditioner/PetscSolverNavierStokes2.cc
455
456
	      ${EXTENSIONS_DIR}/preconditioner/PetscSolverPfc.cc
	      ${EXTENSIONS_DIR}/preconditioner/PetscSolverPfc_diag.cc)
457
458
      endif(ENABLE_PARALLEL_DOMAIN)
      
459
460
461
462
463
      list(APPEND COMPILEFLAGS "-DHAVE_EXTENSIONS=1")
      list(APPEND AMDIS_INCLUDE_DIRS ${EXTENSIONS_DIR})
      list(APPEND AMDIS_INCLUDE_DIRS ${EXTENSIONS_DIR}/time)
      list(APPEND AMDIS_INCLUDE_DIRS ${EXTENSIONS_DIR}/nanoflann)
      list(APPEND AMDIS_INCLUDE_DIRS ${EXTENSIONS_DIR}/pugixml/src)
Praetorius, Simon's avatar
Praetorius, Simon committed
464
465
466
467
468
      if(WIN32)
	add_library(extensions STATIC ${EXTENSIONS_SRC})
      else()
	add_library(extensions SHARED ${EXTENSIONS_SRC})
      endif()
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
      list(APPEND AMDIS_LIBS extensions)

      FILE(GLOB HEADERS "${EXTENSIONS_DIR}/*.h")
      INSTALL(FILES ${HEADERS}
	      DESTINATION include/amdis/extensions/)
      FILE(GLOB HEADERS "${EXTENSIONS_DIR}/*.hh")
      INSTALL(FILES ${HEADERS}
	      DESTINATION include/amdis/extensions/)

      list(APPEND deb_add_dirs "include/amdis/extensions")

      FILE(GLOB HEADERS "${EXTENSIONS_DIR}/time/*.h")
      INSTALL(FILES ${HEADERS}
	      DESTINATION include/amdis/extensions/time/)
      FILE(GLOB HEADERS "${EXTENSIONS_DIR}/time/*.hh")
      INSTALL(FILES ${HEADERS}
	      DESTINATION include/amdis/extensions/time/)
486
487
488
489
490
491
492
	      
      FILE(GLOB HEADERS "${EXTENSIONS_DIR}/preconditioner/*.h")
      INSTALL(FILES ${HEADERS}
	      DESTINATION include/amdis/extensions/preconditioner/)
      FILE(GLOB HEADERS "${EXTENSIONS_DIR}/preconditioner/*.hh")
      INSTALL(FILES ${HEADERS}
	      DESTINATION include/amdis/extensions/preconditioner/)
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508

      list(APPEND deb_add_dirs "include/amdis/extensions/time")

      FILE(GLOB HEADERS "${EXTENSIONS_DIR}/nanoflann/*.hpp")
      INSTALL(FILES ${HEADERS}
	      DESTINATION include/amdis/extensions/nanoflann/)

      list(APPEND deb_add_dirs "include/amdis/extensions/nanoflann")

      FILE(GLOB HEADERS "${EXTENSIONS_DIR}/pugixml/src/*.hpp")
      INSTALL(FILES ${HEADERS}
	      DESTINATION include/amdis/extensions/pugixml/)

      list(APPEND deb_add_dirs "include/amdis/extensions/pugixml")

      install(TARGETS extensions
Praetorius, Simon's avatar
Praetorius, Simon committed
509
	      DESTINATION lib/amdis/ )
510
511
512
513
514

# === baseProblems ====================================================================
      
      if(ENABLE_BASE_PROBLEMS)
	  SET(BASE_PROBLEMS_SRC
515
		  ${EXTENSIONS_DIR}/base_problems/CahnHilliard.cc
Praetorius, Simon's avatar
Praetorius, Simon committed
516
517
		  ${EXTENSIONS_DIR}/base_problems/CahnHilliard_RB.cc
		  ${EXTENSIONS_DIR}/base_problems/CahnHilliardNavierStokes.cc
518
519
520
521
		  ${EXTENSIONS_DIR}/base_problems/CahnHilliardNavierStokes_RB.cc
		  ${EXTENSIONS_DIR}/base_problems/CahnHilliardNavierStokes_TwoPhase.cc
		  ${EXTENSIONS_DIR}/base_problems/CahnHilliardNavierStokes_TwoPhase_RB.cc
		  ${EXTENSIONS_DIR}/base_problems/DiffuseDomainFsi.cc
522
523
		  ${EXTENSIONS_DIR}/base_problems/LinearElasticity.cc
		  ${EXTENSIONS_DIR}/base_problems/LinearElasticityPhase.cc
524
# 		  ${EXTENSIONS_DIR}/base_problems/NavierStokes_Chorin.cc
Praetorius, Simon's avatar
Praetorius, Simon committed
525
		  ${EXTENSIONS_DIR}/base_problems/NavierStokesCahnHilliard.cc
526
# 		  ${EXTENSIONS_DIR}/base_problems/NavierStokesPhase_Chorin.cc
527
		  ${EXTENSIONS_DIR}/base_problems/NavierStokesPhase_TaylorHood.cc
528
		  ${EXTENSIONS_DIR}/base_problems/NavierStokes_TaylorHood.cc
529
		  ${EXTENSIONS_DIR}/base_problems/NavierStokes_TaylorHood_RB.cc
530
		  ${EXTENSIONS_DIR}/base_problems/NavierStokes_TH_MultiPhase.cc
531
		  ${EXTENSIONS_DIR}/base_problems/NavierStokes_TH_MultiPhase_RB.cc
Praetorius, Simon's avatar
Praetorius, Simon committed
532
		  ${EXTENSIONS_DIR}/base_problems/PhaseFieldCrystal.cc
533
		  ${EXTENSIONS_DIR}/base_problems/PhaseFieldCrystal_Phase.cc
534
535
		  ${EXTENSIONS_DIR}/base_problems/PhaseFieldCrystal_RB.cc
		  ${EXTENSIONS_DIR}/base_problems/PolarizationField.cc
536
537
538
539
		  ${EXTENSIONS_DIR}/base_problems/QuasiCrystal.cc
		  ${EXTENSIONS_DIR}/base_problems/QuasiCrystal_RB.cc
# 		  ${EXTENSIONS_DIR}/base_problems/VacancyPhaseFieldCrystal.cc
		  )
540
541
	list(APPEND COMPILEFLAGS "-DHAVE_BASE_PROBLEMS=1")
	list(APPEND AMDIS_INCLUDE_DIRS ${EXTENSIONS_DIR}/base_problems)
Praetorius, Simon's avatar
Praetorius, Simon committed
542
543
544
545
546
	if(WIN32)
	  add_library(base_problems STATIC ${BASE_PROBLEMS_SRC})
	else()
	  add_library(base_problems SHARED ${BASE_PROBLEMS_SRC})
	endif()
547
548
549
550
551
552
553
554
555
556
557
558
	list(APPEND AMDIS_LIBS base_problems)

	FILE(GLOB HEADERS "${EXTENSIONS_DIR}/base_problems/*.h")
	INSTALL(FILES ${HEADERS}
		DESTINATION include/amdis/base_problems/)
	FILE(GLOB HEADERS "${EXTENSIONS_DIR}/base_problems/*.hh")
	INSTALL(FILES ${HEADERS}
		DESTINATION include/amdis/base_problems/)

	list(APPEND deb_add_dirs "include/amdis/base_problems")

	install(TARGETS base_problems
Praetorius, Simon's avatar
Praetorius, Simon committed
559
		DESTINATION lib/amdis/ )
560
    
561
562
563
      endif(ENABLE_BASE_PROBLEMS)
    endif()
  endif()
564
565
endif(ENABLE_EXTENSIONS)

566

Thomas Witkowski's avatar
Blub  
Thomas Witkowski committed
567
if(ENABLE_OPENMP)
Thomas Witkowski's avatar
Thomas Witkowski committed
568
569
570
571
572
  if(CMAKE_CXX_COMPILER MATCHES ".*icpc")
	list(APPEND COMPILEFLAGS "-openmp")
  else()
        list(APPEND COMPILEFLAGS "-fopenmp")
  endif()
Thomas Witkowski's avatar
Blub  
Thomas Witkowski committed
573
574
endif(ENABLE_OPENMP)

575
SET(COMPOSITE_SOURCE_DIR ${SOURCE_DIR}/compositeFEM)
Thomas Witkowski's avatar
Thomas Witkowski committed
576
577
578
579
580
581
582
583
SET(COMPOSITE_FEM_SRC ${COMPOSITE_SOURCE_DIR}/CFE_Integration.cc 
		      ${COMPOSITE_SOURCE_DIR}/CFE_NormAndErrorFcts.cc 
		      ${COMPOSITE_SOURCE_DIR}/CompositeFEMMethods.cc 
		      ${COMPOSITE_SOURCE_DIR}/CompositeFEMOperator.cc 
		      ${COMPOSITE_SOURCE_DIR}/LevelSetAdaptMesh.cc 
		      ${COMPOSITE_SOURCE_DIR}/PenaltyOperator.cc 
		      ${COMPOSITE_SOURCE_DIR}/ElementLevelSet.cc 
		      ${COMPOSITE_SOURCE_DIR}/SubPolytope.cc 
Naumann, Andreas's avatar
Naumann, Andreas committed
584
585
		      ${COMPOSITE_SOURCE_DIR}/SubElementAssembler.cc )

586
587
588
589
set(REINIT_SOURCE_DIR ${SOURCE_DIR}/reinit)
file(GLOB REINIT_SRC ${REINIT_SOURCE_DIR}/*.cc)
include_directories(${REINIT_SOURCE_DIR})

590
591

#muparser includes
592
set(MUPARSER_SOURCE_DIR ${AMDIS_SOURCE_DIR}/lib/muparser_v134)
593
file(GLOB MUPARSER_SRC ${MUPARSER_SOURCE_DIR}/src/*.cpp)
594
list(APPEND AMDIS_INCLUDE_DIRS ${MUPARSER_SOURCE_DIR}/include)
595

Naumann, Andreas's avatar
Naumann, Andreas committed
596
#mtl4 includes
597
list(APPEND AMDIS_INCLUDE_DIRS ${MTL_INCLUDE_DIR})
598
#include_directories(${MTL_INCLUDE_DIR})
599
list(APPEND AMDIS_INCLUDE_DIRS ${SOURCE_DIR})
600

601
#include_directories(${SOURCE_DIR})
602
include_directories(${AMDIS_INCLUDE_DIRS})
Naumann, Andreas's avatar
Naumann, Andreas committed
603

Praetorius, Simon's avatar
Praetorius, Simon committed
604
605
606
607
608
609
610
611
612
613
614
if(WIN32)
  add_library(amdis STATIC ${AMDIS_SRC} ${PARALLEL_DOMAIN_AMDIS_SRC})
  add_library(compositeFEM STATIC ${COMPOSITE_FEM_SRC})
  add_library(reinit STATIC ${REINIT_SRC})
  add_library(muparser STATIC ${MUPARSER_SRC})
else()
  add_library(amdis SHARED ${AMDIS_SRC} ${PARALLEL_DOMAIN_AMDIS_SRC})
  add_library(compositeFEM SHARED ${COMPOSITE_FEM_SRC})
  add_library(reinit SHARED ${REINIT_SRC})
  add_library(muparser SHARED ${MUPARSER_SRC})
endif()
615

Praetorius, Simon's avatar
Praetorius, Simon committed
616
617
#target_link_libraries(compositeFEM amdis)
#target_link_libraries(reinit amdis)
618
list(APPEND AMDIS_LIBS amdis ${Boost_LIBRARIES})
619

620
if(WIN32)
621
	list(APPEND COMPILEFLAGS "-D_SCL_SECURE_NO_WARNINGS" "-D_CRT_SECURE_NO_WARNINGS")
622
endif(WIN32)
623
624


Praetorius, Simon's avatar
Praetorius, Simon committed
625
626
627
628
629
630
631
632
633
634
635
636
if (ENABLE_CXX11)
  list(APPEND COMPILEFLAGS "-DHAS_CXX11=1")
  set_property(TARGET "amdis" PROPERTY CXX_STANDARD 11)
  set_property(TARGET "compositeFEM" PROPERTY CXX_STANDARD 11)
  set_property(TARGET "reinit" PROPERTY CXX_STANDARD 11)
  set_property(TARGET "muparser" PROPERTY CXX_STANDARD 11)
else ()
  list(APPEND COMPILEFLAGS "-DHAS_CXX11=0")
endif (ENABLE_CXX11)
        


637
638
639
640
641
642
643
644
645
646
if(CMAKE_SYSTEM_NAME MATCHES Darwin)
  if(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
     SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS} -flat_namespace -single_module -undefined dynamic_lookup")
     SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS} -flat_namespace -single_module -undefined dynamic_lookup")
 
     set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -bind_at_load -m64")
     set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -bind_at_load -m64")
  endif()
endif()

647
message("compileflags: ${COMPILEFLAGS}")
648
649
#SET_TARGET_PROPERTIES(amdis PROPERTIES COMPILE_FLAGS "${COMPILEFLAGS}")
add_definitions(${COMPILEFLAGS})
650

Naumann, Andreas's avatar
Naumann, Andreas committed
651
652
653
654
if(ENABLE_MARMOT)
	Message("please set marmotcc manually")
endif(ENABLE_MARMOT)

655
#dont change this destination. the GUI depends on it to guess the buildsystem
656

657
FILE(GLOB HEADERS "${SOURCE_DIR}/*.h")
658
659
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/)
Naumann, Andreas's avatar
Naumann, Andreas committed
660
661
list(APPEND deb_add_dirs "include/amdis")

662
663
664
665
666
FILE(GLOB HEADERS "${SOURCE_DIR}/config/*.h*")
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/config/)
list(APPEND deb_add_dirs "include/amdis/config")

667
FILE(GLOB HEADERS "${SOURCE_DIR}/*.hh")
668
669
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/)
Naumann, Andreas's avatar
Naumann, Andreas committed
670

671
672
673
674
FILE(GLOB HEADERS "${SOURCE_DIR}/*.hpp")
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/)

675
FILE(GLOB HEADERS "${SOURCE_DIR}/parallel/*.h")
676
677
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/parallel/)
Naumann, Andreas's avatar
Naumann, Andreas committed
678
679
list(APPEND deb_add_dirs "include/amdis/parallel")

680
681
682
683
684
FILE(GLOB HEADERS "${SOURCE_DIR}/nonlin/*.h")
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/nonlin/)
list(APPEND deb_add_dirs "include/amdis/nonlin")

685
686
687
688
689
FILE(GLOB HEADERS "${SOURCE_DIR}/est/*.h")
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/est/)
list(APPEND deb_add_dirs "include/amdis/est")

690
FILE(GLOB HEADERS "${SOURCE_DIR}/expressions/*.h*")
691
692
693
694
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/expressions/)
list(APPEND deb_add_dirs "include/amdis/expressions")

695
696
697
698
699
700
701
702
703
704
FILE(GLOB HEADERS "${SOURCE_DIR}/operations/*.h*")
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/operations/)
list(APPEND deb_add_dirs "include/amdis/operations")

FILE(GLOB HEADERS "${SOURCE_DIR}/traits/*.h*")
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/traits/)
list(APPEND deb_add_dirs "include/amdis/traits")

Praetorius, Simon's avatar
Praetorius, Simon committed
705
706
707
708
709
FILE(GLOB HEADERS "${SOURCE_DIR}/utility/*.h*")
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/utility/)
list(APPEND deb_add_dirs "include/amdis/utility")

710
FILE(GLOB HEADERS "${SOURCE_DIR}/time/*.h")
711
712
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/time/)
Naumann, Andreas's avatar
Naumann, Andreas committed
713
714
list(APPEND deb_add_dirs "include/amdis/time")

715
716
717
718
719
720
721
722
723
724
FILE(GLOB HEADERS "${SOURCE_DIR}/solver/*.h")
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/solver)
list(APPEND deb_add_dirs "include/amdis/solver")

FILE(GLOB HEADERS "${SOURCE_DIR}/solver/*.hh")
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/solver)
list(APPEND deb_add_dirs "include/amdis/solver")

Siqi Ling's avatar
Siqi Ling committed
725
726
727
728
729
FILE(GLOB HEADERS "${SOURCE_DIR}/solver/details/*.h")
INSTALL(FILES ${HEADERS} 
        DESTINATION include/amdis/solver/details)
list(APPEND deb_add_dirs "include/amdis/solver/details")

730
FILE(GLOB HEADERS "${SOURCE_DIR}/solver/itl/*.hpp")
731
INSTALL(FILES ${HEADERS} 
732
733
	DESTINATION include/amdis/solver/itl)
list(APPEND deb_add_dirs "include/amdis/solver/itl")
Naumann, Andreas's avatar
Naumann, Andreas committed
734

735
FILE(GLOB HEADERS "${SOURCE_DIR}/io/*.h")
Naumann, Andreas's avatar
Naumann, Andreas committed
736
737
INSTALL(FILES ${HEADERS}
	DESTINATION include/amdis/io)
Naumann, Andreas's avatar
Naumann, Andreas committed
738
739
list(APPEND deb_add_dirs "include/amdis/io")

740
FILE(GLOB HEADERS "${SOURCE_DIR}/io/*.hh")
Naumann, Andreas's avatar
Naumann, Andreas committed
741
742
INSTALL(FILES ${HEADERS}
	DESTINATION include/amdis/io)
743
744
745
746
747
	
FILE(GLOB HEADERS "${SOURCE_DIR}/io/detail/*h")
INSTALL(FILES ${HEADERS}
        DESTINATION include/amdis/io/detail)
list(APPEND deb_add_dirs "include/amdis/io/detail")        
748

Praetorius, Simon's avatar
Praetorius, Simon committed
749
750
751
752
753
754
755
756
757
758
FILE(GLOB HEADERS "${REINIT_SOURCE_DIR}/*.h")
INSTALL(FILES ${HEADERS}
	DESTINATION include/amdis/reinit)
list(APPEND deb_add_dirs "include/amdis/reinit")

FILE(GLOB HEADERS "${COMPOSITE_SOURCE_DIR}/*.h")
INSTALL(FILES ${HEADERS}
	DESTINATION include/amdis/compositeFEM)
list(APPEND deb_add_dirs "include/amdis/compositeFEM")

759
760
761
762
763
FILE(GLOB HEADERS "${MUPARSER_SOURCE_DIR}/include/*.h")
INSTALL(FILES ${HEADERS}
	DESTINATION include/amdis/muparser)
list(APPEND deb_add_dirs "include/amdis/muparser")

Praetorius, Simon's avatar
Praetorius, Simon committed
764
list(APPEND deb_add_dirs "lib/amdis")
765
install(TARGETS amdis compositeFEM reinit muparser
Praetorius, Simon's avatar
Praetorius, Simon committed
766
	DESTINATION lib/amdis/ )
Praetorius, Simon's avatar
Praetorius, Simon committed
767

768
769
configure_file(${AMDIS_SOURCE_DIR}/AMDISConfig.cmake.in
		${AMDIS_BINARY_DIR}/AMDISConfig.cmake
770
771
		@ONLY
	      )
772

773
INSTALL(FILES ${AMDIS_BINARY_DIR}/AMDISConfig.cmake 
774
	DESTINATION share/amdis/)
Naumann, Andreas's avatar
Naumann, Andreas committed
775
776
list(APPEND deb_add_dirs "share/amdis/")

777
778
779
780
# INSTALL(FILES ${AMDIS_SOURCE_DIR}/AMDISUse.cmake 
# 	DESTINATION share/amdis/)
FILE(GLOB CMAKE_FILES "${AMDIS_SOURCE_DIR}/*.cmake")
INSTALL(FILES ${CMAKE_FILES}
781
	DESTINATION share/amdis/)
Naumann, Andreas's avatar
Naumann, Andreas committed
782

783
#install mtl
784
INSTALL(DIRECTORY ${AMDIS_SOURCE_DIR}/lib/mtl4/
785
786
787
788
789
790
	DESTINATION include/amdis/mtl4/
	FILES_MATCHING PATTERN "*.hpp"
	PATTERN ".svn" EXCLUDE
	PATTERN ".svn/*" EXCLUDE
	PATTERN "mtl4/libs" EXCLUDE
	PATTERN "mtl4/extern" EXCLUDE
791
       )
Naumann, Andreas's avatar
Naumann, Andreas committed
792
FILE(GLOB_RECURSE mtl4_files 
793
794
		RELATIVE ${AMDIS_SOURCE_DIR}/lib/mtl4/boost/ 
		${AMDIS_SOURCE_DIR}/lib/mtl4/boost/*.hpp)
Naumann, Andreas's avatar
Naumann, Andreas committed
795
796
foreach(mtl4_file in ${mtl4_files})
 get_filename_component(mtl4File_path ${mtl4_file} PATH)
797
 list(APPEND deb_add_dirs "include/amdis/mtl4/boost/${mtl4File_path}")
Naumann, Andreas's avatar
Naumann, Andreas committed
798
endforeach(mtl4_file)
799
800
801
802
803
804

#install documentation
FILE(GLOB DOCS "${AMDIS_SOURCE_DIR}/doc/*.pdf")
INSTALL(FILES  ${DOCS} DESTINATION share/amdis/doc)
list(APPEND deb_add_dirs "share/amdis/doc")

Naumann, Andreas's avatar
Naumann, Andreas committed
805
list(REMOVE_DUPLICATES deb_add_dirs)
806

Praetorius, Simon's avatar
Praetorius, Simon committed
807
808
ENABLE_TESTING()
INCLUDE(CTest)
809
810
811
INCLUDE(Dart)
if(NOT CTEST_MODEL)
        set(CTEST_MODEL "Experimental")
Praetorius, Simon's avatar
Praetorius, Simon committed
812
endif()
813
814
if( NOT N_TEST_PROC) 
	set(N_TEST_PROC "8")
Praetorius, Simon's avatar
Praetorius, Simon committed
815
endif()
816
817
configure_file(myMake.sh.in myMake.sh @ONLY)
configure_file(CTestScript.cmake.in CTestScript.cmake @ONLY)
Praetorius, Simon's avatar
Praetorius, Simon committed
818
819


820
821
# PACKAGES
# ========================================================
822
set(CPACK_PACKAGE_NAME "AMDIS")
823
set(CPACK_PACKAGE_CONTACT "Andreas.Naumann@tu-dresden.de")
824
set(CPACK_PACKAGE_VERSION "${CurrentRevision}")
825
826
set(CPACK_GENERATOR "RPM" "DEB" "TGZ")
set(CPACK_INSTALL_PREFIX "/usr/")
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
set(CPACK_RESOURCE_FILE_LICENSE "${AMDIS_SOURCE_DIR}/license.opensource.txt")

# library depends on boost, but boost libraries have version-number in name on some systems.
# so we have to find a workaround to enforce allowed boost versions
set(boost_ver ${Boost_MINOR_VERSION})
math(EXPR boost_ver_start "${Boost_MINOR_VERSION}+1")
math(EXPR boost_ver_stop "${Boost_MINOR_VERSION}+10")

set(boost_depends "libboost${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})")
set(boost_iostreams_depends "libboost-iostreams${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})")
set(boost_system_depends "libboost-system${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})")
set(boost_filesystem_depends "libboost-filesystem${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})")

foreach(boost_ver RANGE ${boost_ver_start} ${boost_ver_stop})
  set(boost_depends "${boost_depends} | libboost${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})")
  set(boost_iostreams_depends "${boost_iostreams_depends} | libboost-iostreams${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})")
  set(boost_system_depends "${boost_system_depends} | libboost-system${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})")
  set(boost_filesystem_depends "${boost_filesystem_depends} | libboost-filesystem${Boost_MAJOR_VERSION}.${boost_ver}-dev (>= ${Boost_MAJOR_VERSION}.${boost_ver})")
endforeach(boost_ver)
846

847
848
configure_file(${AMDIS_SOURCE_DIR}/preinst.in 
  ${AMDIS_BINARY_DIR}/preinst 
Naumann, Andreas's avatar
Naumann, Andreas committed
849
850
  @ONLY)

851
852
configure_file(${AMDIS_SOURCE_DIR}/postrm.in 
  ${AMDIS_BINARY_DIR}/postrm 
Naumann, Andreas's avatar
Naumann, Andreas committed
853
  @ONLY)
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
  
#----Test if clang setup works----------------------------------------------------------------------
set(COMPILER_VERSION "")
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  exec_program(${CMAKE_C_COMPILER} ARGS "-v" OUTPUT_VARIABLE _clang_version_info)
  string(REGEX REPLACE "^.*[ ]([0-9]+)\\.[0-9].*$" "\\1" CLANG_MAJOR "${_clang_version_info}")
  string(REGEX REPLACE "^.*[ ][0-9]+\\.([0-9]).*$" "\\1" CLANG_MINOR "${_clang_version_info}")
  set(COMPILER_VERSION "clang ${CLANG_MAJOR}.${CLANG_MINOR}")
endif()

#---Obtain the major and minor version of the GNU compiler-------------------------------------------
if (CMAKE_COMPILER_IS_GNUCXX)
  exec_program(${CMAKE_C_COMPILER} ARGS "-dumpversion" OUTPUT_VARIABLE _gcc_version_info)
  string(REGEX REPLACE "^([0-9]+).*$"                   "\\1" GCC_MAJOR ${_gcc_version_info})
  string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*$"          "\\1" GCC_MINOR ${_gcc_version_info})
  string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" GCC_PATCH ${_gcc_version_info})

  if(GCC_PATCH MATCHES "\\.+")
    set(GCC_PATCH "")
  endif()
  if(GCC_MINOR MATCHES "\\.+")
    set(GCC_MINOR "")
  endif()
  if(GCC_MAJOR MATCHES "\\.+")
    set(GCC_MAJOR "")
  endif()
  set(COMPILER_VERSION "gcc ${_gcc_version_info}")
endif()
  
set(CPACK_RPM_PACKAGE_REQUIRES "boost-devel >= ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}, ${RPM_DEPEND_STR}")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${boost_depends},\\n ${boost_iostreams_depends},\\n ${boost_system_depends},\\n ${boost_filesystem_depends}")
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "AMDiS (Adaptive Multi-Dimensional Simulations) - a C++ library to solve partial differential equations using adaptive finite elements. The main features of AMDiS are:
886
 . 
887
888
889
890
891
892
  - full adaptive meshes in 1D, 2D and 3D
  - adaptive time stepping strategies for time dependent equations
  - uses high performance Krylov subspace solvers from MTL4 and the direct solvers UMFPACK and Intel's Pardiso
  - parallelization of the overall finite element method with excelent scaling up to several thounds of processors
  - uses PETSc for solving parallel distributed linear systems
  - easy to use interface, no additional effort to run code in parallel!
893
 . 
894
895
  The library is compiled with ${COMPILER_VERSION} and compiled/linked with boost ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}.")

896
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${AMDIS_BINARY_DIR}/preinst" "${AMDIS_BINARY_DIR}/postrm")
Naumann, Andreas's avatar
Naumann, Andreas committed
897

898
include(CPack)