Liebe Gitlab-Nutzer, lieber Gitlab-Nutzer, es ist nun möglich sich mittels des ZIH-Logins/LDAP an unserem Dienst anzumelden. Ein Anmelden über dieses erzeugt ein neues Konto. Das alte Konto ist über den Reiter "Standard" erreichbar. Die Administratoren

Dear Gitlab user, it is now possible to log in to our service using the ZIH login/LDAP. Logging in via this will create a new account. The old account can be accessed via the "Standard" tab. The administrators

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

3 4
cmake_minimum_required(VERSION 2.8)

Naumann, Andreas's avatar
Naumann, Andreas committed
5 6
#needs: --enable-debug, enable-intel --enable-openmp --enable-parmetis --enable-parallel-domain --enable-umfpack --enable-mkl --enable-boost --enable-marmot

7 8
SET(LIB_DIR ${AMDiS_SOURCE_DIR}/lib)
SET(SOURCE_DIR ${AMDiS_SOURCE_DIR}/src)
9

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

13 14 15 16 17 18 19 20
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g -Wall -DDEBUG=0")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -DDEBUG=1 -O0")

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

Naumann, Andreas's avatar
Naumann, Andreas committed
21 22 23
#option(ENABLE_INTEL "use intel compiler" false)
option(ENABLE_OPENMP "use openmp" false)
option(ENABLE_PARALLEL_DOMAIN "use parallel domain decomposition" false)
24 25 26
set(ENABLE_PARMETIS off)
#SET(PETSC_DIR "" CACHE PATH "Petsc directory for parallel domain decomposition" )
#SET(PETSC_ARCH "" CACHE STRING "Petsc architecture")
Naumann, Andreas's avatar
Naumann, Andreas committed
27 28
option(ENABLE_UMFPACK "use umfpack solver" false)
option(ENABLE_MKL "use the mkl" false)
29
SET(MKL_DIR "" CACHE PATH "MKL directory")
30
option(ENABLE_TESTS "compile the tests" false)
Naumann, Andreas's avatar
Naumann, Andreas committed
31 32 33 34 35 36 37 38 39

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 41 42 43 44 45 46 47 48 49 50
find_package(Boost 1.42 REQUIRED)
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)
Naumann, Andreas's avatar
Naumann, Andreas committed
51

52
SET(AMDIS_SRC ${SOURCE_DIR}/DOFIndexed.cc 
53
	      ${SOURCE_DIR}/io/GNUPlotWriter.cc 
54 55 56 57 58 59 60 61 62
	      ${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 
63 64
	      ${SOURCE_DIR}/ProblemVec.cc
	      ${SOURCE_DIR}/ProblemImplicit.cc 
65 66 67 68 69 70 71
	      ${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 
72 73 74
              ${SOURCE_DIR}/io/MacroInfo.cc
	      ${SOURCE_DIR}/io/MacroReader.cc 
	      ${SOURCE_DIR}/io/ValueReader.cc 
75 76 77 78 79 80 81 82 83 84 85 86 87
	      ${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  
88 89
	      ${SOURCE_DIR}/io/FileWriter.cc 
	      ${SOURCE_DIR}/io/ElementFileWriter.cc 
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
	      ${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 
125
	      ${SOURCE_DIR}/io/MacroWriter.cc 
126 127 128 129 130 131 132 133 134 135 136 137
	      ${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 
138 139 140 141 142
	      ${SOURCE_DIR}/io/ValueWriter.cc 
	      ${SOURCE_DIR}/io/VtkWriter.cc 
	      ${SOURCE_DIR}/io/PngWriter.cc 
	      ${SOURCE_DIR}/io/PovrayWriter.cc 
	      ${SOURCE_DIR}/io/DataCollector.cc 
143 144 145 146
	      ${SOURCE_DIR}/ScalableQuadrature.cc 
	      ${SOURCE_DIR}/SubElInfo.cc 
	      ${SOURCE_DIR}/parallel/InteriorBoundary.cc 
	      ${SOURCE_DIR}/ElementDofIterator.cc 
Naumann, Andreas's avatar
Naumann, Andreas committed
147
	      ${SOURCE_DIR}/Debug.cc
148 149
	      ${SOURCE_DIR}/io/ArhReader.cc
	      ${SOURCE_DIR}/io/ArhWriter.cc
150 151 152
              ${SOURCE_DIR}/time/RosenbrockAdaptInstationary.cc 
	      ${SOURCE_DIR}/time/RosenbrockStationary.cc 
	      ${SOURCE_DIR}/time/RosenbrockMethod.cc
Naumann, Andreas's avatar
Naumann, Andreas committed
153 154
	      )

155
if(ENABLE_PARALLEL_DOMAIN)
Naumann, Andreas's avatar
Naumann, Andreas committed
156 157 158 159
	find_package(MPI REQUIRED)
	INCLUDE (CMakeForceCompiler)	
	CMAKE_FORCE_C_COMPILER(mpicc "MPI C compiler")
	CMAKE_FORCE_CXX_COMPILER(mpiCC "MPI C++ compiler")
160 161 162 163 164
 
	add_custom_target(parmetis-lib ALL
			make
			WORKING_DIRECTORY ${LIB_DIR}/ParMetis-3.1
			)
Naumann, Andreas's avatar
Naumann, Andreas committed
165
	include_directories( ${LIB_DIR}/ParMetis-3.1)
166
        INSTALL(FILES ${LIB_DIR}/ParMetis-3.1/parmetis.h
167 168 169
		${LIB_DIR}/ParMetis-3.1/libparmetis.a
		${LIB_DIR}/ParMetis-3.1/libmetis.a
		DESTINATION lib/parmetis
170
	       )
171
	set(ENABLE_PARMETIS ON)
Naumann, Andreas's avatar
Naumann, Andreas committed
172

173
	find_package(PETSc REQUIRED)
Naumann, Andreas's avatar
Naumann, Andreas committed
174 175
	include_directories(${PETSC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/include)
	SET(PARALLEL_DOMAIN_AMDIS_SRC
176
                ${SOURCE_DIR}/parallel/ParMetisPartitioner.cc
177
		${SOURCE_DIR}/parallel/MeshDistributor.cc 
178
		${SOURCE_DIR}/parallel/MeshManipulation.cc
Naumann, Andreas's avatar
Naumann, Andreas committed
179
		${SOURCE_DIR}/parallel/StdMpi.cc
180
		${SOURCE_DIR}/parallel/ParallelDebug.cc
181
		${SOURCE_DIR}/parallel/MpiHelper.cc
182 183
		${SOURCE_DIR}/parallel/ElementObjectData.cc
		${SOURCE_DIR}/parallel/PetscSolver.cc)
Naumann, Andreas's avatar
Naumann, Andreas committed
184 185 186 187
	SET(COMPILEFLAGS "${COMPILEFLAGS} -DHAVE_PARALLEL_DOMAIN_AMDIS=1")
endif(ENABLE_PARALLEL_DOMAIN)

if(ENABLE_OPENMP)
188 189 190 191 192 193
	find_package(OpenMP)
	if(OPENMP_FOUND)
		SET(COMPILEFLAGS "${COMPILEFLAGS} ${OpenMP_CXX_FLAGS}")
	else()
		message(WARNING "your compiler seems support openmp")
	endif()
Naumann, Andreas's avatar
Naumann, Andreas committed
194 195 196 197 198
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")
199
        FILE(GLOB UMFPACK_HEADERS "${LIB_DIR}/UMFPACK/Include/*.h")
200 201
	INSTALL(FILES ${UMFPACK_HEADERS} 
		DESTINATION include/amdis/umfpack/)
202

203
	FILE(GLOB UMFPACK_HEADERS "${LIB_DIR}/AMD/Include/*.h")
204 205
	INSTALL(FILES ${UMFPACK_HEADERS} 
		DESTINATION include/amdis/amd/)
206

207
	FILE(GLOB HEADERS "${LIB_DIR}/UFconfig/*.h")
208 209
	INSTALL(FILES ${HEADERS} 
		DESTINATION include/amdis/ufconfig/)
210

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

215 216 217 218 219 220 221 222 223 224 225 226
#add some rules to build the umfpack and amd libs
#	message("adding command for libumfpack:${CMAKE_CURRENT_SOURCE_DIR}/${LIB_DIR}/UMFPACK/Lib/libumfpack.a ")
	add_custom_target(umfpack-lib ALL
			make
			WORKING_DIRECTORY ${LIB_DIR}/UMFPACK
			)

	add_custom_target(amd-lib ALL
			 make
			WORKING_DIRECTORY ${LIB_DIR}/AMD
			)

227 228 229 230 231
	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")
232
	LIST(APPEND AMDiS_LIBS amdis blas amd umfpack)
Naumann, Andreas's avatar
Naumann, Andreas committed
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247
endif(ENABLE_UMFPACK)

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

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
248
include_directories(${MTL_DIR})
Naumann, Andreas's avatar
Naumann, Andreas committed
249 250
include_directories(${SOURCE_DIR})

251
add_library(amdis SHARED ${AMDIS_SRC} ${PARALLEL_DOMAIN_AMDIS_SRC})
Naumann, Andreas's avatar
Naumann, Andreas committed
252
add_library(compositeFEM SHARED ${COMPOSITE_FEM_SRC})
253
target_link_libraries(compositeFEM amdis)
254
LIST(APPEND AMDiS_LIBS amdis boost_system boost_iostreams)
255 256 257
if(WIN32)
	SET(COMPILEFLAGS "${COMPILEFLAGS} -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS")
endif(WIN32)
258
message("compileflags: ${COMPILEFLAGS}")
259 260
#SET_TARGET_PROPERTIES(amdis PROPERTIES COMPILE_FLAGS "${COMPILEFLAGS}")
add_definitions(${COMPILEFLAGS})
Naumann, Andreas's avatar
Naumann, Andreas committed
261 262 263 264 265
if(ENABLE_MARMOT)
	Message("please set marmotcc manually")
endif(ENABLE_MARMOT)

install(TARGETS amdis compositeFEM 
266
	LIBRARY DESTINATION lib/amdis/ )
267

268
FILE(GLOB HEADERS "${SOURCE_DIR}/*.h")
269 270
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/)
271
FILE(GLOB HEADERS "${SOURCE_DIR}/*.hh")
272 273
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/)
274
FILE(GLOB HEADERS "${SOURCE_DIR}/parallel/*.h")
275 276
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/parallel/)
277
FILE(GLOB HEADERS "${SOURCE_DIR}/time/*.h")
278 279
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/time/)
280
FILE(GLOB HEADERS "${SOURCE_DIR}/itl/*.hpp")
281 282
INSTALL(FILES ${HEADERS} 
	DESTINATION include/amdis/itl)
283
FILE(GLOB HEADERS "${SOURCE_DIR}/io/*.h")
Naumann, Andreas's avatar
Naumann, Andreas committed
284 285
INSTALL(FILES ${HEADERS}
	DESTINATION include/amdis/io)
286
FILE(GLOB HEADERS "${SOURCE_DIR}/io/*.hh")
Naumann, Andreas's avatar
Naumann, Andreas committed
287 288
INSTALL(FILES ${HEADERS}
	DESTINATION include/amdis/io)
289

290
configure_file(${AMDiS_SOURCE_DIR}/AMDiSConfig.cmake.in
291 292 293
		${AMDiS_BINARY_DIR}/AMDiSConfig.cmake
		@ONLY
	      )
294 295
INSTALL(FILES ${AMDiS_BINARY_DIR}/AMDiSConfig.cmake 
	DESTINATION share/amdis/)
296
INSTALL(FILES ${AMDiS_SOURCE_DIR}/AMDiSUse.cmake 
297
	DESTINATION share/amdis/)
Naumann, Andreas's avatar
Naumann, Andreas committed
298

299
#install mtl
300
INSTALL(DIRECTORY ${AMDiS_SOURCE_DIR}/lib/mtl4/
301 302 303 304 305 306
	DESTINATION include/amdis/mtl4/
	FILES_MATCHING PATTERN "*.hpp"
	PATTERN ".svn" EXCLUDE
	PATTERN ".svn/*" EXCLUDE
	PATTERN "mtl4/libs" EXCLUDE
	PATTERN "mtl4/extern" EXCLUDE
307
       )
308 309

#PACKAGES
310 311 312
#let cmake look for the svn-version
find_package(Subversion)
if(Subversion_FOUND)
313
	Subversion_WC_INFO(${AMDiS_SOURCE_DIR} mtlSubinfo)
314 315 316 317 318
	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
319
set(CPACK_PACKAGE_NAME "AMDiS")
320
set(CPACK_PACKAGE_CONTACT "Andreas.Naumann@tu-dresden.de")
321
set(CPACK_PACKAGE_VERSION "0.9.${CurrentRevision}")
322 323 324 325
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
326
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libboost-dev (>= 1.42)")
327
include(CPack)
Naumann, Andreas's avatar
Naumann, Andreas committed
328
if(ENABLE_TESTS)
329 330
ENABLE_TESTING()
add_subdirectory(test)
Naumann, Andreas's avatar
Naumann, Andreas committed
331
endif(ENABLE_TESTS)