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_ELEM_TYPE_H
21 #define LIBMESH_ENUM_ELEM_TYPE_H
22 
23 namespace libMesh {
24 
25 /**
26  * Defines an \p enum for geometric element types.
27  *
28  * The fixed type, i.e. ": int", enumeration syntax used here allows
29  * this enum to be forward declared as
30  * enum ElemType : int;
31  * reducing header file dependencies.
32  */
33 enum ElemType : int {
34                // 1D
35                EDGE2 = 0,
36                EDGE3 = 1,
37                EDGE4 = 2,
38                // 2D
39                TRI3 = 3,
40                TRI6 = 4,
41                QUAD4 = 5,
42                QUAD8 = 6,
43                QUAD9 = 7,
44                // 3D
45                TET4 = 8,
46                TET10 = 9,
47                HEX8 = 10,
48                HEX20 = 11,
49                HEX27 = 12,
50                PRISM6 = 13,
51                PRISM15 = 14,
52                PRISM18 = 15,
53                PYRAMID5 = 16,
54                PYRAMID13 = 17,
55                PYRAMID14 = 18,
56                // Infinite Elems
57                INFEDGE2 = 19,
58                INFQUAD4 = 20,
59                INFQUAD6 = 21,
60                INFHEX8 = 22,
61                INFHEX16 = 23,
62                INFHEX18 = 24,
63                INFPRISM6 = 25,
64                INFPRISM12 = 26,
65                // 0D
66                NODEELEM = 27,
67                // Miscellaneous Elems
68                REMOTEELEM = 28,
69                TRI3SUBDIVISION = 29,
70                // Shell Elems
71                TRISHELL3 = 30,
72                QUADSHELL4 = 31,
73                QUADSHELL8 = 32,
74                // Invalid
75                INVALID_ELEM};   // should always be last
76 
77 /**
78  * Enumeration of possible element master->physical mapping types.
79  * We don't just directly store FEType for this because we want to
80  * be certain our options all pack into a single char in an Elem.
81  */
82 enum ElemMappingType : unsigned char {
83   LAGRANGE_MAP = 0,
84   RATIONAL_BERNSTEIN_MAP,
85   INVALID_MAP };
86 
87 }
88 
89 #endif
90