1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2020 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License, or (at your option) any later version.
8 
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 // Lesser General Public License for more details.
13 
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17 
18 
19 
20 #ifndef LIBMESH_ENUM_FE_FAMILY_H
21 #define LIBMESH_ENUM_FE_FAMILY_H
22 
23 namespace libMesh {
24 
25 /**
26  * \enum libMesh::FEFamily defines an \p enum for finite
27  * element families.
28  *
29  * The fixed type, i.e. ": int", enumeration syntax used here allows
30  * this enum to be forward declared as
31  * enum FEFamily : int;
32  * reducing header file dependencies.
33  */
34 enum FEFamily : int {
35                // C0
36                LAGRANGE     = 0,
37                HIERARCHIC   = 1,
38                // discontinuous, in local coordinates
39                MONOMIAL      = 2,
40                L2_HIERARCHIC = 6,
41                L2_LAGRANGE   = 7,
42                // higher-order
43                BERNSTEIN    = 3,
44                SZABAB       = 4,
45                // discontinuous, in global coordinates
46                XYZ          = 5,
47                // infinite element stuff
48                INFINITE_MAP = 11,     //   for 1/r-map
49                JACOBI_20_00 = 12,     //   i_max = 19
50                JACOBI_30_00 = 13,     //   i_max = 19
51                LEGENDRE     = 14,     //   i_max = 19
52                // C1 elements
53                CLOUGH       = 21,
54                HERMITE      = 22,
55                SUBDIVISION  = 23,
56                // A scalar variable that couples to
57                // all other DOFs in the system
58                SCALAR       = 31,
59                // Vector-valued elements
60                LAGRANGE_VEC = 41,
61                NEDELEC_ONE  = 42,
62                MONOMIAL_VEC = 43,
63                // Rational basis functions
64                RATIONAL_BERNSTEIN = 61,
65                // Invalid
66                INVALID_FE   = 99};
67 
68 /**
69  * \enum libMesh::FEContinuity defines an \p enum for finite element
70  * types to libmesh_assert a certain level (or type? Hcurl?) of continuity.
71  *
72  * The fixed type, i.e. ": int", enumeration syntax used here allows
73  * this enum to be forward declared as
74  * enum FEContinuity : int;
75  * reducing header file dependencies.
76  */
77 enum FEContinuity : int {
78                    DISCONTINUOUS,
79                    C_ZERO,
80                    C_ONE,
81                    H_CURL};
82 
83 /**
84  * \enum libMesh::FEFieldType defines an \p enum for finite element
85  * field types - i.e. is it a scalar element, vector, tensor, etc.
86  *
87  * The fixed type, i.e. ": int", enumeration syntax used here allows
88  * this enum to be forward declared as
89  * enum FEFieldType : int;
90  * reducing header file dependencies.
91  */
92 enum FEFieldType : int {
93                   TYPE_SCALAR = 0,
94                   TYPE_VECTOR};
95 
96 }
97 
98 #endif
99