MFEM  v4.6.0
Finite element discretization library
tconfig.hpp
Go to the documentation of this file.
1 // Copyright (c) 2010-2023, Lawrence Livermore National Security, LLC. Produced
2 // at the Lawrence Livermore National Laboratory. All Rights reserved. See files
3 // LICENSE and NOTICE for details. LLNL-CODE-806117.
4 //
5 // This file is part of the MFEM library. For more information and source code
6 // availability visit https://mfem.org.
7 //
8 // MFEM is free software; you can redistribute it and/or modify it under the
9 // terms of the BSD-3 license. We welcome feedback and contributions, see file
10 // CONTRIBUTING.md for details.
11 
12 #ifndef MFEM_TEMPLATE_CONFIG
13 #define MFEM_TEMPLATE_CONFIG
14 
15 // the main MFEM config header
16 #include "config.hpp"
17 
18 // --- MFEM_STATIC_ASSERT
19 #if (__cplusplus >= 201103L)
20 #define MFEM_STATIC_ASSERT(cond, msg) static_assert((cond), msg)
21 #else
22 #define MFEM_STATIC_ASSERT(cond, msg) if (cond) { }
23 #endif
24 
25 // --- MFEM_ALWAYS_INLINE
26 #if !defined(MFEM_DEBUG) && (defined(__GNUC__) || defined(__clang__))
27 #define MFEM_ALWAYS_INLINE __attribute__((always_inline))
28 #else
29 #define MFEM_ALWAYS_INLINE
30 #endif
31 
32 // --- MFEM_VECTORIZE_LOOP (disabled)
33 #if (__cplusplus >= 201103L) && !defined(MFEM_DEBUG) && defined(__GNUC__)
34 //#define MFEM_VECTORIZE_LOOP _Pragma("GCC ivdep")
35 #define MFEM_VECTORIZE_LOOP
36 #else
37 #define MFEM_VECTORIZE_LOOP
38 #endif
39 
40 // MFEM_TEMPLATE_BLOCK_SIZE is the block size used by the template matrix-matrix
41 // multiply, Mult_AB, defined in tmatrix.hpp. This parameter will generally
42 // require tuning to determine good value. It is probably highly influenced by
43 // the SIMD width when Mult_AB is used with a SIMD type like AutoSIMD.
44 #define MFEM_TEMPLATE_BLOCK_SIZE 4
45 
46 #define MFEM_TEMPLATE_ENABLE_SERIALIZE
47 
48 // #define MFEM_TEMPLATE_ELTRANS_HAS_NODE_DOFS
49 // #define MFEM_TEMPLATE_ELTRANS_RESULT_HAS_NODES
50 // #define MFEM_TEMPLATE_FIELD_EVAL_DATA_HAS_DOFS
51 #define MFEM_TEMPLATE_INTRULE_COEFF_PRECOMP
52 
53 #ifdef MFEM_COUNT_FLOPS
54 namespace mfem
55 {
56 namespace internal
57 {
58 extern long long flop_count;
59 }
60 }
61 #define MFEM_FLOPS_RESET() (mfem::internal::flop_count = 0)
62 #define MFEM_FLOPS_ADD(cnt) (mfem::internal::flop_count += (cnt))
63 #define MFEM_FLOPS_GET() (mfem::internal::flop_count)
64 #else
65 #define MFEM_FLOPS_RESET()
66 #define MFEM_FLOPS_ADD(cnt)
67 #define MFEM_FLOPS_GET() (0)
68 #endif
69 
70 #endif // MFEM_TEMPLATE_CONFIG