Loading [MathJax]/extensions/tex2jax.js
https://mooseframework.inl.gov
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
libMeshReducedNamespace.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 // This is the minimal set of headers to make all the types below that cannot be
13 // forward-declared as classes available.
14 
15 // These headers add constants that we want to add to the namespace.
16 #include "libmesh/libmesh.h"
17 #include "libmesh/remote_elem.h"
18 
19 // This header declares functions that we want to add to the namespace. If we chose not to include
20 // this header, we will need to repeat the function declaration here
21 #include "libmesh/int_range.h" // for make_range + several typedefs
22 
23 // These headers introduce typedefs that we are adding to the local namespace. If we chose not
24 // to include these headers, we will need to repeat the typedef here
25 #include "libmesh/id_types.h"
26 #include "libmesh/vector_value.h"
27 #include "libmesh/tensor_value.h"
28 
29 // These are required for the range typedefs they contain, which cannot be forward-declared
30 // without re-defining the typedef. This allows us to add the ranges in the local namespace
31 // but at the cost of defining them, including very many headers
32 #include "libmesh/elem_range.h"
33 #include "libmesh/node_range.h"
34 
35 // Added for convenience
36 #include "libmesh/enum_elem_type.h"
37 #include "libmesh/enum_fe_family.h"
38 #include "libmesh/enum_order.h"
39 #include "libmesh/enum_parallel_type.h"
40 #include "libmesh/enum_point_locator_type.h"
41 
42 // README
43 // If you hit a compilation error that the XYZ class shown here is not defined, and it is declared
44 // in this header then you forgot to include the libMesh header in your header/source that actually
45 // declared the class. We only forward declare it here.
46 
47 // We want all the types below to be available everywhere
48 // Element types
49 namespace libMesh
50 {
51 class Edge;
52 class Edge2;
53 class Edge3;
54 class Edge4;
55 class Hex;
56 class Hex8;
57 class Hex20;
58 class Hex27;
59 class Prism;
60 class Prism15;
61 class Prism18;
62 class Prism21;
63 class Prism6;
64 class Pyramid;
65 class Pyramid5;
66 class Pyramid13;
67 class Pyramid14;
68 class Quad;
69 class Quad4;
70 class Quad8;
71 class Quad9;
72 class Tet;
73 class Tet4;
74 class Tet10;
75 class Tet14;
76 class Tri;
77 class Tri3;
78 class Tri6;
79 class Tri7;
80 class RemoteElem;
81 }
82 
83 using libMesh::Edge;
84 using libMesh::Edge2;
85 using libMesh::EDGE2;
86 using libMesh::Edge3;
87 using libMesh::EDGE3;
88 using libMesh::Edge4;
89 using libMesh::EDGE4;
90 using libMesh::ElemType;
91 using libMesh::Hex;
92 using libMesh::Hex20;
93 using libMesh::HEX20;
94 using libMesh::Hex27;
95 using libMesh::HEX27;
96 using libMesh::Hex8;
97 using libMesh::HEX8;
98 using libMesh::NODEELEM;
99 using libMesh::Prism;
100 using libMesh::Prism15;
101 using libMesh::PRISM15;
102 using libMesh::Prism18;
103 using libMesh::PRISM18;
104 using libMesh::Prism21;
105 using libMesh::PRISM21;
106 using libMesh::Prism6;
107 using libMesh::PRISM6;
108 using libMesh::Pyramid;
109 using libMesh::Pyramid13;
110 using libMesh::PYRAMID13;
111 using libMesh::Pyramid14;
112 using libMesh::PYRAMID14;
113 using libMesh::Pyramid5;
114 using libMesh::PYRAMID5;
115 using libMesh::Quad;
116 using libMesh::Quad4;
117 using libMesh::QUAD4;
118 using libMesh::Quad8;
119 using libMesh::QUAD8;
120 using libMesh::Quad9;
121 using libMesh::QUAD9;
123 using libMesh::RemoteElem;
124 using libMesh::Tet;
125 using libMesh::Tet10;
126 using libMesh::TET10;
127 using libMesh::Tet14;
128 using libMesh::TET14;
129 using libMesh::Tet4;
130 using libMesh::TET4;
131 using libMesh::Tri;
132 using libMesh::Tri3;
133 using libMesh::TRI3;
134 using libMesh::Tri6;
135 using libMesh::TRI6;
136 using libMesh::Tri7;
137 using libMesh::TRI7;
138 
139 // Continuity types
140 using libMesh::C_ONE;
141 using libMesh::C_ZERO;
143 using libMesh::H_CURL;
144 using libMesh::H_DIV;
146 
147 // Finite element helper classes
148 namespace libMesh
149 {
150 class FEType;
151 class FEInterface;
152 class FEMap;
153 template <typename T>
154 class FEGenericBase;
155 // "Forward-declaring" typedefs must match exactly how they were defined
158 }
159 
160 using libMesh::FEBase;
163 using libMesh::FEMap;
164 using libMesh::FEType;
166 
167 // Ranges
168 namespace libMesh
169 {
170 template <typename T, typename P>
171 class StoredRange;
172 }
173 
176 using libMesh::NodeRange;
178 
179 // Mesh classes
180 namespace libMesh
181 {
182 class DistributedMesh;
183 class ReplicatedMesh;
184 class UnstructuredMesh;
185 class MeshBase;
186 class BoundingBox;
187 }
188 
191 using libMesh::MeshBase;
194 
195 // Solver classes
196 namespace libMesh
197 {
198 class Partitioner;
199 class DofObject;
200 class OrderWrapper;
202 }
203 using libMesh::DofObject;
207 
208 // Common data types
211 using libMesh::Number;
214 using libMesh::Real;
215 using libMesh::RealTensor;
218 
219 // Common templated types
220 namespace libMesh
221 {
222 template <typename T>
223 class NumericVector;
224 template <typename T>
225 class SparseMatrix;
226 template <typename T>
227 class TensorValue;
228 template <typename>
229 class TypeVector;
230 template <unsigned int, typename>
231 class TypeNTensor;
232 template <typename T>
233 class TypeTensor;
234 template <typename T>
235 class VectorValue;
236 }
237 
242 using libMesh::TypeTensor;
243 using libMesh::TypeVector;
245 
246 // Common FE families
247 using libMesh::HIERARCHIC;
250 using libMesh::LAGRANGE;
252 using libMesh::MONOMIAL;
253 using libMesh::SCALAR;
254 
255 // Counting from 0 to 20
256 using libMesh::CONSTANT;
257 using libMesh::EIGHTEENTH;
258 using libMesh::EIGHTH;
259 using libMesh::ELEVENTH;
260 using libMesh::FIFTEENTH;
261 using libMesh::FIFTH;
262 using libMesh::FIRST;
263 using libMesh::FOURTEENTH;
264 using libMesh::FOURTH;
266 using libMesh::NINETEENTH;
267 using libMesh::NINTH;
268 using libMesh::Order;
269 using libMesh::SECOND;
271 using libMesh::SEVENTH;
272 using libMesh::SIXTEENTH;
273 using libMesh::SIXTH;
274 using libMesh::TENTH;
275 using libMesh::THIRD;
276 using libMesh::THIRTEENTH;
277 using libMesh::TWELFTH;
278 using libMesh::TWENTIETH;
279 
280 // Parallel types
281 using libMesh::AUTOMATIC;
282 using libMesh::GHOSTED;
283 using libMesh::PARALLEL;
284 using libMesh::SERIAL;
285 
286 // Point locator types
287 using libMesh::NANOFLANN;
288 using libMesh::TREE;
291 
292 // Common mesh classes
293 namespace libMesh
294 {
295 class BoundaryInfo;
296 class Elem;
297 class Node;
298 class Point;
299 }
300 
302 using libMesh::Elem;
303 using libMesh::Node;
304 using libMesh::Point;
305 
306 // Common utilities
307 using libMesh::as_range;
308 using libMesh::cast_int;
309 using libMesh::cast_ptr;
310 using libMesh::cast_ref;
313 using libMesh::make_range;
314 
315 // Common defaults
317 using libMesh::TOLERANCE;
318 
319 // Declare all the nested namespaces we use in MOOSE without prefacing with
320 // libMesh::
321 namespace libMesh
322 {
323 namespace MeshTools
324 {
325 }
326 namespace Predicates
327 {
328 }
329 namespace TensorTools
330 {
331 }
332 namespace Threads
333 {
334 }
335 namespace Utility
336 {
337 }
338 namespace Parallel
339 {
340 }
341 }
342 namespace MeshTools = libMesh::MeshTools;
343 namespace Predicates = libMesh::Predicates;
345 namespace Threads = libMesh::Threads;
346 namespace Utility = libMesh::Utility;
347 namespace Parallel = libMesh::Parallel;
348 
349 // Added to pass downstream app tests
350 // All these are all already prefaced with 'libMesh::' in the framework and modules
351 #include "libmesh/enum_norm_type.h"
353 
354 using libMesh::pi;
355 using libMesh::zero;
356 
357 namespace libMesh
358 {
359 class DoFMap;
360 class PerfLog;
361 class System;
362 class ExplicitSystem;
363 class ImplicitSystem;
366 class EigenSystem;
367 class ExodusII_IO;
368 class PointLocatorBase;
369 enum FEFamily : int;
370 enum QuadratureType : int;
371 template <typename T>
372 struct ScalarTraits;
373 class Mesh;
374 class MeshSerializer;
376 template <typename T>
377 class SimpleRange;
378 template <typename Output, typename OutputGradient>
379 class ParsedFunction;
380 template <typename T>
381 class PetscVector;
382 template <typename T>
383 class PetscMatrix;
384 class PeriodicBoundaries;
385 class QTrap;
386 class QGauss;
388 template <typename T>
389 class Preconditioner;
390 enum PreconditionerType : int;
391 template <typename T>
393 struct SyncElementIntegers;
394 }
395 using libMesh::DoFMap;
399 using libMesh::FEFamily;
402 using libMesh::Mesh;
406 using libMesh::PerfLog;
414 using libMesh::QGauss;
415 using libMesh::QTrap;
421 using libMesh::System;
const unsigned int invalid_uint
static constexpr Real TOLERANCE
TestClass subdomain_id_type
Tnew cast_ref(Told &oldvar)
Tnew cast_ptr(Told *oldvar)
RealTensorValue RealTensor
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
const Number zero
FEGenericBase< RealGradient > FEVectorBase
uint8_t processor_id_type
StoredRange< MeshBase::const_element_iterator, const Elem *> ConstElemRange
Tnew cast_int(Told oldvar)
SIDE_DISCONTINUOUS
void libmesh_ignore(const Args &...)
int8_t boundary_id_type
dof_id_type numeric_index_type
SimpleRange< IndexType > as_range(const std::pair< IndexType, IndexType > &p)
StoredRange< MeshBase::const_node_iterator, const Node *> ConstNodeRange
FEGenericBase< Real > FEBase
PreconditionerType
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IntRange< T > make_range(T beg, T end)
TREE_LOCAL_ELEMENTS
Real Number
StoredRange< MeshBase::node_iterator, Node *> NodeRange
uint8_t unique_id_type
void ErrorVector unsigned int
auto index_range(const T &sizable)
uint8_t dof_id_type
const Real pi
const RemoteElem * remote_elem