1// ---------------------------------------------------------------------
2//
3// Copyright (C) 2012 - 2020 by the deal.II authors
4//
5// This file is part of the deal.II library.
6//
7// The deal.II library is free software; you can use it, redistribute
8// it, and/or modify it under the terms of the GNU Lesser General
9// Public License as published by the Free Software Foundation; either
10// version 2.1 of the License, or (at your option) any later version.
11// The full text of the license can be found in the file LICENSE.md at
12// the top level directory of deal.II.
13//
14// ---------------------------------------------------------------------
15
16#ifndef dealii_config_h
17#define dealii_config_h
18
19
20/***********************************************************************
21 * Information about deal.II:
22 */
23
24#define DEAL_II_PACKAGE_NAME "@DEAL_II_PACKAGE_NAME@"
25
26#define DEAL_II_PACKAGE_VERSION "@DEAL_II_PACKAGE_VERSION@"
27
28#define DEAL_II_VERSION_MAJOR @DEAL_II_VERSION_MAJOR@
29#define DEAL_II_VERSION_MINOR @DEAL_II_VERSION_MINOR@
30#define DEAL_II_VERSION_SUBMINOR @DEAL_II_VERSION_SUBMINOR@
31
32
33/***********************************************************************
34 * Configured deal.II features:
35 */
36
37#cmakedefine DEAL_II_WITH_64BIT_INDICES
38#cmakedefine DEAL_II_WITH_ADOLC
39#cmakedefine DEAL_II_WITH_ARPACK
40#cmakedefine DEAL_II_WITH_ASSIMP
41#cmakedefine DEAL_II_WITH_COMPLEX_VALUES
42#cmakedefine DEAL_II_WITH_CUDA
43#cmakedefine DEAL_II_WITH_GINKGO
44#cmakedefine DEAL_II_WITH_GSL
45#cmakedefine DEAL_II_WITH_GMSH
46#cmakedefine DEAL_II_WITH_HDF5
47#cmakedefine DEAL_II_WITH_LAPACK
48#cmakedefine LAPACK_WITH_64BIT_BLAS_INDICES
49#cmakedefine DEAL_II_LAPACK_WITH_MKL
50#cmakedefine DEAL_II_WITH_METIS
51#cmakedefine DEAL_II_WITH_MPI
52#cmakedefine DEAL_II_WITH_MUPARSER
53#cmakedefine DEAL_II_WITH_OPENCASCADE
54#cmakedefine DEAL_II_WITH_P4EST
55#cmakedefine DEAL_II_WITH_PETSC
56#cmakedefine DEAL_II_WITH_SCALAPACK
57#cmakedefine DEAL_II_WITH_SIMPLEX_SUPPORT
58#cmakedefine DEAL_II_WITH_SLEPC
59#cmakedefine DEAL_II_WITH_SUNDIALS
60#cmakedefine DEAL_II_WITH_SYMENGINE
61#cmakedefine DEAL_II_WITH_TASKFLOW
62#cmakedefine DEAL_II_WITH_TBB
63#cmakedefine DEAL_II_WITH_TRILINOS
64#cmakedefine DEAL_II_WITH_UMFPACK
65#cmakedefine DEAL_II_WITH_ZLIB
66
67#ifdef DEAL_II_WITH_TBB
68/*
69 * Backward compatibility setting:
70 * FIXME: Update once transition to taskflow is complete
71 */
72#define DEAL_II_WITH_THREADS
73#define TBB_SUPPRESS_DEPRECATED_MESSAGES 1
74#endif
75
76/***********************************************************************
77 * Compiler bugs:
78 *
79 * For documentation see cmake/checks/check_03_compiler_bugs.cmake
80 */
81
82/***********************************************************************
83 * Compiler features:
84 *
85 * For documentation see cmake/checks/check_01_compiler_features.cmake
86 */
87
88#cmakedefine DEAL_II_COMPILER_USE_VECTOR_ARITHMETICS
89#cmakedefine DEAL_II_VECTOR_ITERATOR_IS_POINTER
90#cmakedefine DEAL_II_HAVE_BUILTIN_EXPECT
91#cmakedefine DEAL_II_HAVE_GLIBC_STACKTRACE
92#cmakedefine DEAL_II_HAVE_LIBSTDCXX_DEMANGLER
93#cmakedefine __PRETTY_FUNCTION__ @__PRETTY_FUNCTION__@
94#cmakedefine DEAL_II_ALWAYS_INLINE @DEAL_II_ALWAYS_INLINE@
95#cmakedefine DEAL_II_RESTRICT @DEAL_II_RESTRICT@
96#cmakedefine DEAL_II_COMPILER_HAS_DIAGNOSTIC_PRAGMA
97
98/*
99 * A variable to tell if the compiler used in the current compilation process
100 * understands CUDA code.
101 */
102#if defined(DEAL_II_WITH_CUDA) && defined(__CUDACC__)
103#  define DEAL_II_COMPILER_CUDA_AWARE
104#endif
105
106/***********************************************************************
107 * CPU features:
108 *
109 * For documentation see cmake/checks/check_01_cpu_features.cmake
110 */
111
112#cmakedefine DEAL_II_WORDS_BIGENDIAN
113
114/*
115 * This sets the largest number of vectorization bits detected for the given
116 * compiler flags and hardware (e.g. 256 for AVX on x86-64 architectures) for
117 * use in deal.II's instrinsics-based VectorizedArray class.
118 */
119#define DEAL_II_VECTORIZATION_WIDTH_IN_BITS @DEAL_II_VECTORIZATION_WIDTH_IN_BITS@
120
121/*
122 * Backward compatibility setting
123 */
124#if DEAL_II_VECTORIZATION_WIDTH_IN_BITS == 512
125#define DEAL_II_COMPILER_VECTORIZATION_LEVEL 3
126#elif DEAL_II_VECTORIZATION_WIDTH_IN_BITS == 256
127#define DEAL_II_COMPILER_VECTORIZATION_LEVEL 2
128#elif DEAL_II_VECTORIZATION_WIDTH_IN_BITS == 128
129#define DEAL_II_COMPILER_VECTORIZATION_LEVEL 1
130#else
131#define DEAL_II_COMPILER_VECTORIZATION_LEVEL 0
132#endif
133
134#define DEAL_II_OPENMP_SIMD_PRAGMA @DEAL_II_OPENMP_SIMD_PRAGMA@
135
136
137/***********************************************************************
138 * Language features:
139 *
140 * For documentation see cmake/checks/check_01_cxx_features.cmake
141 */
142
143#cmakedefine DEAL_II_HAVE_CXX14
144#cmakedefine DEAL_II_HAVE_CXX17
145#cmakedefine DEAL_II_HAVE_CXX20
146
147#cmakedefine DEAL_II_HAVE_FP_EXCEPTIONS
148#cmakedefine DEAL_II_HAVE_COMPLEX_OPERATOR_OVERLOADS
149#cmakedefine DEAL_II_HAVE_CXX17_BESSEL_FUNCTIONS
150#cmakedefine DEAL_II_CXX14_CONSTEXPR_BUG
151
152#cmakedefine DEAL_II_DEPRECATED @DEAL_II_DEPRECATED@
153#cmakedefine DEAL_II_FALLTHROUGH @DEAL_II_FALLTHROUGH@
154#cmakedefine DEAL_II_CONSTEXPR @DEAL_II_CONSTEXPR@
155
156// defined for backwards compatibility with older deal.II versions
157#define DEAL_II_WITH_CXX11
158#define DEAL_II_WITH_CXX14
159#ifdef DEAL_II_HAVE_CXX17
160#  define DEAL_II_WITH_CXX17
161#endif
162
163
164/***********************************************************************
165 * System features:
166 *
167 * For documentation see cmake/checks/check_02_system_features.cmake
168 */
169
170#cmakedefine DEAL_II_HAVE_SYS_RESOURCE_H
171#cmakedefine DEAL_II_HAVE_UNISTD_H
172#cmakedefine DEAL_II_HAVE_GETHOSTNAME
173#cmakedefine DEAL_II_HAVE_GETPID
174#cmakedefine DEAL_II_HAVE_JN
175
176#cmakedefine DEAL_II_MSVC
177
178
179/***********************************************************************
180 * Feature configuration
181 *
182 * For documentation see cmake/configure/configure_*.cmake and
183 * cmake/modules/Find*.cmake
184 */
185
186/* cmake/modules/FindADOLC.cmake */
187#cmakedefine DEAL_II_ADOLC_WITH_ATRIG_ERF
188#cmakedefine DEAL_II_ADOLC_WITH_ADVANCED_BRANCHING
189#cmakedefine DEAL_II_ADOLC_WITH_TAPELESS_REFCOUNTING
190
191/* cmake/modules/FindARPACK.cmake */
192#cmakedefine DEAL_II_ARPACK_WITH_PARPACK
193
194/* cmake/modules/FindPETSC.cmake */
195#cmakedefine DEAL_II_PETSC_WITH_COMPLEX
196#cmakedefine DEAL_II_PETSC_WITH_HYPRE
197#cmakedefine DEAL_II_PETSC_WITH_MUMPS
198
199/* cmake/modules/FindSUNDIALS.cmake */
200#cmakedefine DEAL_II_SUNDIALS_WITH_IDAS
201
202/* cmake/modules/FindSYMENGINE.cmake */
203#cmakedefine DEAL_II_SYMENGINE_WITH_LLVM
204
205/* cmake/configure/configure_2_trilinos.cmake */
206#cmakedefine DEAL_II_TRILINOS_CXX_SUPPORTS_SACADO_COMPLEX_RAD
207#cmakedefine DEAL_II_TRILINOS_WITH_EPETRAEXT
208#cmakedefine DEAL_II_TRILINOS_WITH_ROL
209#cmakedefine DEAL_II_TRILINOS_WITH_SACADO
210#cmakedefine DEAL_II_TRILINOS_WITH_TPETRA
211#cmakedefine DEAL_II_TRILINOS_WITH_MUELU
212#cmakedefine DEAL_II_TRILINOS_WITH_ZOLTAN
213
214
215/***********************************************************************
216 * Various macros for version number query and comparison:
217 *
218 * These macros are defined to make testing for specific versions within
219 * the deal.II main code as simple as possible.
220 */
221
222/*
223 * deal.II:
224 */
225
226#define DEAL_II_VERSION_GTE(major,minor,subminor) \
227 ((DEAL_II_VERSION_MAJOR * 10000 + \
228    DEAL_II_VERSION_MINOR * 100 + \
229     DEAL_II_VERSION_SUBMINOR) \
230    >=  \
231    (major)*10000 + (minor)*100 + (subminor))
232
233
234/*
235 * Gmsh:
236 */
237#ifdef DEAL_II_WITH_GMSH
238#  define DEAL_II_GMSH_EXECUTABLE_PATH "@GMSH_EXECUTABLE@"
239#endif
240
241/*
242 * p4est:
243 */
244
245#ifdef DEAL_II_WITH_P4EST
246#  define DEAL_II_P4EST_VERSION_MAJOR @P4EST_VERSION_MAJOR@
247#  define DEAL_II_P4EST_VERSION_MINOR @P4EST_VERSION_MINOR@
248#  define DEAL_II_P4EST_VERSION_SUBMINOR @P4EST_VERSION_SUBMINOR@
249#  define DEAL_II_P4EST_VERSION_PATCH @P4EST_VERSION_PATCH@
250
251#  define DEAL_II_P4EST_VERSION_GTE(major,minor,subminor,patch) \
252 ((DEAL_II_P4EST_VERSION_MAJOR * 1000000 + \
253    DEAL_II_P4EST_VERSION_MINOR * 10000 + \
254     DEAL_II_P4EST_VERSION_SUBMINOR * 100 + \
255      DEAL_II_P4EST_VERSION_PATCH) \
256    >=  \
257    (major)*1000000 + (minor)*10000 + (subminor)*100 + (patch))
258#endif
259
260/*
261 * SUNDIALS:
262 */
263
264#ifdef DEAL_II_WITH_SUNDIALS
265 #  define DEAL_II_SUNDIALS_VERSION_MAJOR @SUNDIALS_VERSION_MAJOR@
266 #  define DEAL_II_SUNDIALS_VERSION_MINOR @SUNDIALS_VERSION_MINOR@
267 #  define DEAL_II_SUNDIALS_VERSION_PATCH @SUNDIALS_VERSION_PATCH@
268
269 #define DEAL_II_SUNDIALS_VERSION_GTE(major,minor,patch) \
270   ((DEAL_II_SUNDIALS_VERSION_MAJOR * 10000 + \
271     DEAL_II_SUNDIALS_VERSION_MINOR * 100 + \
272     DEAL_II_SUNDIALS_VERSION_PATCH) \
273     >=  \
274     (major)*10000 + (minor)*100 + (patch))
275
276 #define DEAL_II_SUNDIALS_VERSION_LT(major,minor,patch) \
277   ((DEAL_II_SUNDIALS_VERSION_MAJOR * 10000 + \
278     DEAL_II_SUNDIALS_VERSION_MINOR * 100 + \
279     DEAL_II_SUNDIALS_VERSION_PATCH) \
280     <  \
281     (major)*10000 + (minor)*100 + (patch))
282#endif
283
284/*
285 * PETSc:
286 *
287 * Note: The following definitions will be set in petscconf.h and
288 *       petscversion.h, so we don't repeat them here.
289 *
290 *  PETSC_VERSION_MAJOR
291 *  PETSC_VERSION_MINOR
292 *  PETSC_VERSION_SUBMINOR
293 *  PETSC_VERSION_PATCH
294 *  PETSC_VERSION_RELEASE
295 *  PETSC_USE_COMPLEX
296 */
297
298#define DEAL_II_PETSC_VERSION_LT(major,minor,subminor) \
299  ((PETSC_VERSION_MAJOR * 10000 + \
300    PETSC_VERSION_MINOR * 100 + \
301    PETSC_VERSION_SUBMINOR) \
302    <  \
303    (major)*10000 + (minor)*100 + (subminor))
304
305#define DEAL_II_PETSC_VERSION_GTE(major,minor,subminor) \
306  ((PETSC_VERSION_MAJOR * 10000 + \
307    PETSC_VERSION_MINOR * 100 + \
308    PETSC_VERSION_SUBMINOR) \
309    >=  \
310    (major)*10000 + (minor)*100 + (subminor))
311
312/*
313 * SLEPC
314 * see slepcversion.h
315 */
316#define DEAL_II_SLEPC_VERSION_GTE(major,minor,subminor) \
317  ((SLEPC_VERSION_MAJOR * 10000 + \
318    SLEPC_VERSION_MINOR * 100 + \
319    SLEPC_VERSION_SUBMINOR) \
320    >=  \
321    (major)*10000 + (minor)*100 + (subminor))
322
323/*
324 * Trilinos:
325 */
326
327#ifdef DEAL_II_WITH_TRILINOS
328#  define DEAL_II_TRILINOS_VERSION_MAJOR @TRILINOS_VERSION_MAJOR@
329#  define DEAL_II_TRILINOS_VERSION_MINOR @TRILINOS_VERSION_MINOR@
330#  define DEAL_II_TRILINOS_VERSION_SUBMINOR @TRILINOS_VERSION_SUBMINOR@
331
332#  define DEAL_II_TRILINOS_VERSION_GTE(major,minor,subminor) \
333 ((DEAL_II_TRILINOS_VERSION_MAJOR * 10000 + \
334    DEAL_II_TRILINOS_VERSION_MINOR * 100 + \
335      DEAL_II_TRILINOS_VERSION_SUBMINOR) \
336    >=  \
337    (major)*10000 + (minor)*100 + (subminor))
338#endif
339
340/*
341 * MPI
342 */
343
344#ifdef DEAL_II_WITH_MPI
345#  define DEAL_II_MPI_VERSION_MAJOR @MPI_VERSION_MAJOR@
346#  define DEAL_II_MPI_VERSION_MINOR @MPI_VERSION_MINOR@
347
348#  define DEAL_II_MPI_VERSION_GTE(major,minor) \
349 ((DEAL_II_MPI_VERSION_MAJOR * 100 + \
350    DEAL_II_MPI_VERSION_MINOR) \
351    >=  \
352    (major)*100 + (minor))
353#endif
354
355#cmakedefine DEAL_II_MPI_WITH_CUDA_SUPPORT
356
357/***********************************************************************
358 * Two macro names that we put at the top and bottom of all deal.II files
359 * and that will be expanded to "namespace dealii {" and "}".
360 */
361
362#define DEAL_II_NAMESPACE_OPEN namespace dealii {
363#define DEAL_II_NAMESPACE_CLOSE }
364
365/***********************************************************************
366 * Two macros to guard external header includes.
367 *
368 * Selectively disable diagnostics set by "-Wextra" (and similar flags) for
369 * GCC and compiler accepting GCC dialects (such as clang).
370 * "diagnostic push" is supported since gcc-4.6 and clang-3.3.
371 */
372
373#ifdef DEAL_II_COMPILER_HAS_DIAGNOSTIC_PRAGMA
374
375/* keep pragmas with an exclamation mark in order.. */
376#  define DEAL_II_DISABLE_EXTRA_DIAGNOSTICS                             \
377_Pragma("GCC diagnostic push")                                    /*!*/ \
378_Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")           /*!*/ \
379_Pragma("GCC diagnostic ignored \"-Wpragmas\"")                   /*!*/ \
380_Pragma("GCC diagnostic ignored \"-Wunknown-warning-option\"")    /*!*/ \
381_Pragma("GCC diagnostic ignored \"-Wunknown-warning\"")           /*!*/ \
382_Pragma("GCC diagnostic ignored \"-Wextra\"")                     /*!*/ \
383_Pragma("GCC diagnostic ignored \"-Waddress-of-packed-member\"")        \
384_Pragma("GCC diagnostic ignored \"-Wdeprecated-copy\"")                 \
385_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")         \
386_Pragma("GCC diagnostic ignored \"-Wexpansion-to-defined\"")            \
387_Pragma("GCC diagnostic ignored \"-Wexpansion-to-defined\"")            \
388_Pragma("GCC diagnostic ignored \"-Wignored-attributes\"")              \
389_Pragma("GCC diagnostic ignored \"-Wignored-qualifiers\"")              \
390_Pragma("GCC diagnostic ignored \"-Wimplicit-fallthrough\"")            \
391_Pragma("GCC diagnostic ignored \"-Winfinite-recursion\"")              \
392_Pragma("GCC diagnostic ignored \"-Wint-in-bool-context\"")             \
393_Pragma("GCC diagnostic ignored \"-Wmisleading-indentation\"")          \
394_Pragma("GCC diagnostic ignored \"-Wmissing-field-initializers\"")      \
395_Pragma("GCC diagnostic ignored \"-Wnested-anon-types\"")               \
396_Pragma("GCC diagnostic ignored \"-Wnon-virtual-dtor\"")                \
397_Pragma("GCC diagnostic ignored \"-Woverflow\"")                        \
398_Pragma("GCC diagnostic ignored \"-Woverloaded-virtual\"")              \
399_Pragma("GCC diagnostic ignored \"-Wpedantic\"")                        \
400_Pragma("GCC diagnostic ignored \"-Wsuggest-override\"")                \
401_Pragma("GCC diagnostic ignored \"-Wtautological-constant-out-of-range-compare\"") \
402_Pragma("GCC diagnostic ignored \"-Wtautological-overlap-compare\"")    \
403_Pragma("GCC diagnostic ignored \"-Wtype-limits\"")                     \
404_Pragma("GCC diagnostic ignored \"-Wundef\"")                           \
405_Pragma("GCC diagnostic ignored \"-Wunused-but-set-parameter\"")        \
406_Pragma("GCC diagnostic ignored \"-Wunused-but-set-variable\"")         \
407_Pragma("GCC diagnostic ignored \"-Wunused-function\"")                 \
408_Pragma("GCC diagnostic ignored \"-Wunused-parameter\"")                \
409_Pragma("GCC diagnostic ignored \"-Wunused-private-field\"")            \
410_Pragma("GCC diagnostic ignored \"-Wunused-variable\"")                 \
411_Pragma("GCC diagnostic warning \"-Wpragmas\"")                   /*!*/
412
413#  define DEAL_II_ENABLE_EXTRA_DIAGNOSTICS                              \
414_Pragma("GCC diagnostic pop")
415
416#else
417
418#  define DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
419#  define DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
420
421#endif
422
423/***********************************************************************
424 * Define a portable preprocessor macro that generates custom warnings
425 * reporting the line and the file where the warning appears. Taken from:
426 * http://goodliffe.blogspot.com/2009/07/c-how-to-say-warning-to-visual-studio-c.html
427 */
428
429#ifdef _MSC_VER
430  #define DEAL_II_STRINGIZE_HELPER(x) #x
431  #define DEAL_II_STRINGIZE(x) DEAL_II_STRINGIZE_HELPER(x)
432  #define DEAL_II_DO_PRAGMA(x) __pragma(x)
433  #define DEAL_II_WARNING(desc) DEAL_II_DO_PRAGMA(message(__FILE__ "(" DEAL_II_STRINGIZE(__LINE__) ") : warning: " #desc))
434#else
435  #define DEAL_II_DO_PRAGMA(x) _Pragma(#x)
436  #define DEAL_II_WARNING(desc) DEAL_II_DO_PRAGMA(message(#desc))
437#endif
438
439/***********************************************************************
440 * Final inclusions:
441 */
442
443/*
444 * Some systems require including mpi.h before stdio.h which happens in
445 * types.h
446 */
447#if defined(DEAL_II_WITH_MPI) || defined(DEAL_II_WITH_PETSC)
448DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
449#  include <mpi.h>
450DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
451#endif
452
453#include <deal.II/base/numbers.h>
454#include <deal.II/base/types.h>
455
456#endif
457