MFEM v4.10.0
Finite element discretization library
Loading...
Searching...
No Matches
fe_coll.hpp
Go to the documentation of this file.
1// Copyright (c) 2010-2026, 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_FE_COLLECTION
13#define MFEM_FE_COLLECTION
14
15#include "../config/config.hpp"
16#include "geom.hpp"
17#include "fe.hpp"
18
19namespace mfem
20{
21
22/** @brief Collection of finite elements from the same family in multiple
23 dimensions. This class is used to match the degrees of freedom of a
24 FiniteElementSpace between elements, and to provide the finite element
25 restriction from an element to its boundary. */
27{
28protected:
29 template <Geometry::Type geom>
30 static inline void GetNVE(int &nv, int &ne);
31
32 template <Geometry::Type geom, typename v_t>
33 static inline void GetEdge(int &nv, v_t &v, int &ne, int &e, int &eo,
34 const int edge_info);
35
36 template <Geometry::Type geom, Geometry::Type f_geom,
37 typename v_t, typename e_t, typename eo_t>
38 static inline void GetFace(int &nv, v_t &v, int &ne, e_t &e, eo_t &eo,
39 int &nf, int &f, Geometry::Type &fg, int &fo,
40 const int face_info);
41
42public:
43 /** @brief Enumeration for ContType: defines the continuity of the field
44 across element interfaces. */
45 enum { CONTINUOUS, ///< Field is continuous across element interfaces
46 TANGENTIAL, ///< Tangential components of vector field
47 NORMAL, ///< Normal component of vector field
48 DISCONTINUOUS ///< Field is discontinuous across element interfaces
49 };
50
51 virtual const FiniteElement *
53
54 /** @brief Returns the first non-NULL FiniteElement for the given dimension
55
56 @note Repeatedly calls FiniteElementForGeometry in the order defined in
57 the Geometry::Type enumeration.
58 */
59 virtual const FiniteElement *FiniteElementForDim(int dim) const;
60
61 virtual int DofForGeometry(Geometry::Type GeomType) const = 0;
62
63 /** @brief Returns a DoF transformation object compatible with this basis
64 and geometry type.
65 */
66 virtual const StatelessDofTransformation *
68 { return NULL; }
69
70 /** @brief Returns an array, say p, that maps a local permuted index i to a
71 local base index: base_i = p[i].
72
73 @note Only provides information about interior dofs. See
74 FiniteElementCollection::SubDofOrder if interior \a and boundary dof
75 order is needed. */
76 virtual const int *DofOrderForOrientation(Geometry::Type GeomType,
77 int Or) const = 0;
78
79 virtual const char *Name() const { return "Undefined"; }
80
81 virtual int GetContType() const = 0;
82
83 /** @note The following methods provide the same information as the
84 corresponding methods of the FiniteElement base class.
85 @{
86 */
87 int GetRangeType(int dim) const;
88 int GetDerivRangeType(int dim) const;
89 int GetMapType(int dim) const;
90 int GetDerivType(int dim) const;
91 int GetDerivMapType(int dim) const;
92 int GetRangeDim(int dim) const;
93 /** @} */
94
95 int HasFaceDofs(Geometry::Type geom, int p) const;
96
98 Geometry::Type GeomType) const
99 {
100 return FiniteElementForGeometry(GeomType);
101 }
102
103 /** @brief Returns a collection of the trace elements.
104
105 @note The collection is owned by the caller and is NOT deleted in the
106 destructor. */
108
109 virtual ~FiniteElementCollection();
110
111 /** @brief Factory method: return a newly allocated FiniteElementCollection
112 according to the given name. */
113 /**
114 | FEC Name | Space | Order | BasisType | FiniteElement::MapT | Notes |
115 | :------: | :---: | :---: | :-------: | :-----: | :---: |
116 | H1_[DIM]_[ORDER] | H1 | * | 1 | VALUE | H1 nodal elements |
117 | H1@[BTYPE]_[DIM]_[ORDER] | H1 | * | * | VALUE | H1 nodal elements |
118 | H1Pos_[DIM]_[ORDER] | H1 | * | 2 | VALUE | H1 nodal elements |
119 | H1Pos_Trace_[DIM]_[ORDER] | H^{1/2} | * | 2 | VALUE | H^{1/2}-conforming trace elements for H1 defined on the interface between mesh elements (faces,edges,vertices) |
120 | H1_Trace_[DIM]_[ORDER] | H^{1/2} | * | 1 | VALUE | H^{1/2}-conforming trace elements for H1 defined on the interface between mesh elements (faces,edges,vertices) |
121 | H1_Trace@[BTYPE]_[DIM]_[ORDER] | H^{1/2} | * | * | VALUE | H^{1/2}-conforming trace elements for H1 defined on the interface between mesh elements (faces,edges,vertices) |
122 | ND_[DIM]_[ORDER] | H(curl) | * | 1 / 0 | H_CURL | Nedelec vector elements |
123 | ND@[CBTYPE][OBTYPE]_[DIM]_[ORDER] | H(curl) | * | * / * | H_CURL | Nedelec vector elements |
124 | ND_Trace_[DIM]_[ORDER] | H^{1/2} | * | 1 / 0 | H_CURL | H^{1/2}-conforming trace elements for H(curl) defined on the interface between mesh elements (faces,edges) |
125 | ND_Trace@[CBTYPE][OBTYPE]_[DIM]_[ORDER] | H^{1/2} | * | * / * | H_CURL | H^{1/2}-conforming trace elements for H(curl) defined on the interface between mesh elements (faces,edges) |
126 | ND_R1D_[DIM]_[ORDER] | H(curl) | * | 1 / 0 | H_CURL | 3D H(curl)-conforming Nedelec vector elements in 1D. |
127 | ND_R1D@[CBTYPE][OBTYPE]_[DIM]_[ORDER] | H(curl) | * | * / * | H_CURL | 3D H(curl)-conforming Nedelec vector elements in 1D. |
128 | ND_R2D_[DIM]_[ORDER] | H(curl) | * | 1 / 0 | H_CURL | 3D H(curl)-conforming Nedelec vector elements in 2D. |
129 | ND_R2D@[CBTYPE][OBTYPE]_[DIM]_[ORDER] | H(curl) | * | * / * | H_CURL | 3D H(curl)-conforming Nedelec vector elements in 2D. |
130 | RT_[DIM]_[ORDER] | H(div) | * | 1 / 0 | H_DIV | Raviart-Thomas vector elements |
131 | RT@[CBTYPE][OBTYPE]_[DIM]_[ORDER] | H(div) | * | * / * | H_DIV | Raviart-Thomas vector elements |
132 | RT_Trace_[DIM]_[ORDER] | H^{1/2} | * | 0 | INTEGRAL | H^{1/2}-conforming trace elements for H(div) defined on the interface between mesh elements (faces) |
133 | RT_ValTrace_[DIM]_[ORDER] | H^{1/2} | * | 0 | VALUE | H^{1/2}-conforming trace elements for H(div) defined on the interface between mesh elements (faces) |
134 | RT_Trace@[BTYPE]_[DIM]_[ORDER] | H^{1/2} | * | * | INTEGRAL | H^{1/2}-conforming trace elements for H(div) defined on the interface between mesh elements (faces) |
135 | RT_ValTrace@[BTYPE]_[DIM]_[ORDER] | H^{1/2} | * | * | VALUE | H^{1/2}-conforming trace elements for H(div) defined on the interface between mesh elements (faces) |
136 | RT_R1D_[DIM]_[ORDER] | H(div) | * | 1 / 0 | H_DIV | 3D H(div)-conforming Raviart-Thomas vector elements in 1D. |
137 | RT_R1D@[CBTYPE][OBTYPE]_[DIM]_[ORDER] | H(div) | * | * / * | H_DIV | 3D H(div)-conforming Raviart-Thomas vector elements in 1D. |
138 | RT_R2D_[DIM]_[ORDER] | H(div) | * | 1 / 0 | H_DIV | 3D H(div)-conforming Raviart-Thomas vector elements in 2D. |
139 | RT_R2D@[CBTYPE][OBTYPE]_[DIM]_[ORDER] | H(div) | * | * / * | H_DIV | 3D H(div)-conforming Raviart-Thomas vector elements in 2D. |
140 | L2_[DIM]_[ORDER] | L2 | * | 0 | VALUE | Discontinuous L2 elements |
141 | L2_T[BTYPE]_[DIM]_[ORDER] | L2 | * | * | VALUE | Discontinuous L2 elements |
142 | L2Int_[DIM]_[ORDER] | L2 | * | 0 | INTEGRAL | Discontinuous L2 elements |
143 | L2Int_T[BTYPE]_[DIM]_[ORDER] | L2 | * | * | INTEGRAL | Discontinuous L2 elements |
144 | DG_Iface_[DIM]_[ORDER] | - | * | 0 | VALUE | Discontinuous elements on the interface between mesh elements (faces) |
145 | DG_Iface@[BTYPE]_[DIM]_[ORDER] | - | * | * | VALUE | Discontinuous elements on the interface between mesh elements (faces) |
146 | DG_IntIface_[DIM]_[ORDER] | - | * | 0 | INTEGRAL | Discontinuous elements on the interface between mesh elements (faces) |
147 | DG_IntIface@[BTYPE]_[DIM]_[ORDER] | - | * | * | INTEGRAL | Discontinuous elements on the interface between mesh elements (faces) |
148 | NURBS[ORDER] | - | * | - | VALUE | Non-Uniform Rational B-Splines (NURBS) elements |
149 | LinearNonConf3D | - | 1 | 1 | VALUE | Piecewise-linear nonconforming finite elements in 3D |
150 | CrouzeixRaviart | - | - | - | - | Crouzeix-Raviart nonconforming elements in 2D |
151 | Local_[FENAME] | - | - | - | - | Special collection that builds a local version out of the FENAME collection |
152 |-|-|-|-|-|-|
153 | Linear | H1 | 1 | 1 | VALUE | Left in for backward compatibility, consider using H1_ |
154 | Quadratic | H1 | 2 | 1 | VALUE | Left in for backward compatibility, consider using H1_ |
155 | QuadraticPos | H1 | 2 | 2 | VALUE | Left in for backward compatibility, consider using H1_ |
156 | Cubic | H1 | 2 | 1 | VALUE | Left in for backward compatibility, consider using H1_ |
157 | Const2D | L2 | 0 | 1 | VALUE | Left in for backward compatibility, consider using L2_ |
158 | Const3D | L2 | 0 | 1 | VALUE | Left in for backward compatibility, consider using L2_ |
159 | LinearDiscont2D | L2 | 1 | 1 | VALUE | Left in for backward compatibility, consider using L2_ |
160 | GaussLinearDiscont2D | L2 | 1 | 0 | VALUE | Left in for backward compatibility, consider using L2_ |
161 | P1OnQuad | H1 | 1 | 1 | VALUE | Linear P1 element with 3 nodes on a square |
162 | QuadraticDiscont2D | L2 | 2 | 1 | VALUE | Left in for backward compatibility, consider using L2_ |
163 | QuadraticPosDiscont2D | L2 | 2 | 2 | VALUE | Left in for backward compatibility, consider using L2_ |
164 | GaussQuadraticDiscont2D | L2 | 2 | 0 | VALUE | Left in for backward compatibility, consider using L2_ |
165 | CubicDiscont2D | L2 | 3 | 1 | VALUE | Left in for backward compatibility, consider using L2_ |
166 | LinearDiscont3D | L2 | 1 | 1 | VALUE | Left in for backward compatibility, consider using L2_ |
167 | QuadraticDiscont3D | L2 | 2 | 1 | VALUE | Left in for backward compatibility, consider using L2_ |
168 | ND1_3D | H(Curl) | 1 | 1 / 0 | H_CURL | Left in for backward compatibility, consider using ND_ |
169 | RT0_2D | H(Div) | 1 | 1 / 0 | H_DIV | Left in for backward compatibility, consider using RT_ |
170 | RT1_2D | H(Div) | 2 | 1 / 0 | H_DIV | Left in for backward compatibility, consider using RT_ |
171 | RT2_2D | H(Div) | 3 | 1 / 0 | H_DIV | Left in for backward compatibility, consider using RT_ |
172 | RT0_3D | H(Div) | 1 | 1 / 0 | H_DIV | Left in for backward compatibility, consider using RT_ |
173 | RT1_3D | H(Div) | 2 | 1 / 0 | H_DIV | Left in for backward compatibility, consider using RT_ |
174
175 | Tag | Description |
176 | :------: | :--------: |
177 | [DIM] | Dimension of the elements (1D, 2D, 3D) |
178 | [ORDER] | Approximation order of the elements (P0, P1, P2, ...) |
179 | [BTYPE] | BasisType of the element (0-GaussLegendre, 1-GaussLobatto, 2-Bernstein, 3-OpenUniform, 4-CloseUniform, 5-OpenHalfUniform 6-Serendipity 7-ClosedGL 8-IntegratedGLL) |
180 | [OBTYPE] | Open BasisType of the element for elements which have both types |
181 | [CBTYPE] | Closed BasisType of the element for elements which have both types |
182
183 [FENAME] Is a special case for the Local FEC which generates a local version of a given
184 FEC. It is selected from one of (BiCubic2DFiniteElement, Quad_Q3, Nedelec1HexFiniteElement,
185 Hex_ND1, H1_[DIM]_[ORDER],H1Pos_[DIM]_[ORDER], L2_[DIM]_[ORDER] )
186 */
187 static FiniteElementCollection *New(const char *name);
188
189 /** @brief Get the local dofs for a given sub-manifold.
190
191 Return the local dofs for a SDim-dimensional sub-manifold (0D - vertex, 1D
192 - edge, 2D - face) including those on its boundary. The local index of the
193 sub-manifold (inside Geom) and its orientation are given by the parameter
194 Info = 64 * SubIndex + SubOrientation. Naturally, it is assumed that 0 <=
195 SDim <= Dim(Geom). */
196 void SubDofOrder(Geometry::Type Geom, int SDim, int Info,
197 Array<int> &dofs) const;
198
199 /// Variable order version of FiniteElementForGeometry().
200 /** The order parameter @a p represents the order of the highest-dimensional
201 FiniteElement%s the fixed-order collection we want to query. In general,
202 this order is different from the order of the returned FiniteElement. */
203 const FiniteElement *GetFE(Geometry::Type geom, int p) const
204 {
205 if (p == base_p) { return FiniteElementForGeometry(geom); }
206 if (p >= var_orders.Size() || !var_orders[p]) { InitVarOrder(p); }
207 return var_orders[p]->FiniteElementForGeometry(geom);
208 }
209
210 /// Variable order version of TraceFiniteElementForGeometry().
211 /** The order parameter @a p represents the order of the highest-dimensional
212 FiniteElement%s the fixed-order collection we want to query. In general,
213 this order is different from the order of the returned FiniteElement. */
214 const FiniteElement *GetTraceFE(Geometry::Type geom, int p) const
215 {
216 if (p == base_p) { return TraceFiniteElementForGeometry(geom); }
217 if (p >= var_orders.Size() || !var_orders[p]) { InitVarOrder(p); }
218 return var_orders[p]->TraceFiniteElementForGeometry(geom);
219 }
220
221 /// Variable order version of DofForGeometry().
222 /** The order parameter @a p represents the order of the highest-dimensional
223 FiniteElement%s the fixed-order collection we want to query. In general,
224 this order is different from the order of the element corresponding to
225 @a geom in that fixed-order collection. */
226 int GetNumDof(Geometry::Type geom, int p) const
227 {
228 if (p == base_p) { return DofForGeometry(geom); }
229 if (p >= var_orders.Size() || !var_orders[p]) { InitVarOrder(p); }
230 return var_orders[p]->DofForGeometry(geom);
231 }
232
233 /// Variable order version of DofOrderForOrientation().
234 /** The order parameter @a p represents the order of the highest-dimensional
235 FiniteElement%s the fixed-order collection we want to query. In general,
236 this order is different from the order of the element corresponding to
237 @a geom in that fixed-order collection. */
238 const int *GetDofOrdering(Geometry::Type geom, int p, int ori) const
239 {
240 if (p == base_p) { return DofOrderForOrientation(geom, ori); }
241 if (p >= var_orders.Size() || !var_orders[p]) { InitVarOrder(p); }
242 return var_orders[p]->DofOrderForOrientation(geom, ori);
243 }
244
245 /** @brief Return the order (polynomial degree) of the FE collection,
246 corresponding to the order/degree returned by FiniteElement::GetOrder()
247 of the highest-dimensional FiniteElement%s defined by the collection. */
248 int GetOrder() const { return base_p; }
249
250 /// Instantiate a new collection of the same type with a different order.
251 /** Generally, the order parameter @a p is NOT the same as the parameter @a p
252 used by some of the constructors of derived classes. Instead, this @a p
253 represents the order of the new FE collection as it will be returned by
254 its GetOrder() method. */
255 virtual FiniteElementCollection *Clone(int p) const;
256
257 /** @brief Return the order parameter used to construct this collection.
258 * This differs from GetOrder() depending on the collection type. */
259 virtual int GetConstructorOrder() const
260 {
261 MFEM_ABORT("Collection " << Name() << " does not support GetConstructorOrder");
262 return -1;
263 }
264
265protected:
266 const int base_p; ///< Order as returned by GetOrder().
267
270
271 void InitVarOrder(int p) const;
272
274
275 /// How to treat errors in FiniteElementForGeometry() calls.
277 {
278 RETURN_NULL, ///< Return NULL on errors
279 RAISE_MFEM_ERROR /**< Raise an MFEM error (default in base class).
280 Sub-classes can ignore this and return NULL. */
281 };
282
283 /// How to treat errors in FiniteElementForGeometry() calls.
284 /** The typical error in derived classes is that no FiniteElement is defined
285 for the given Geometry, or the input is not a valid Geometry. */
287};
288
289/// Arbitrary order H1-conforming (continuous) finite elements.
291{
292protected:
294 char h1_name[32];
297 int *SegDofOrd[2], *TriDofOrd[6], *QuadDofOrd[8], *TetDofOrd[24];
298
299public:
300 explicit H1_FECollection(const int p, const int dim = 3,
301 const int btype = BasisType::GaussLobatto,
302 const int pyr_type = ScalarPyramid::DefaultType);
303
304 const FiniteElement *
305 FiniteElementForGeometry(Geometry::Type GeomType) const override;
306
307 int DofForGeometry(Geometry::Type GeomType) const override
308 { return H1_dof[GeomType]; }
309
310 const int *DofOrderForOrientation(Geometry::Type GeomType,
311 int Or) const override;
312
313 const char *Name() const override { return h1_name; }
314
315 int GetContType() const override { return CONTINUOUS; }
316
317 int GetBasisType() const { return b_type; }
318
320
321 /// Get the Cartesian to local H1 dof map
322 const int *GetDofMap(Geometry::Type GeomType) const;
323 /// Variable order version of GetDofMap
324 const int *GetDofMap(Geometry::Type GeomType, int p) const;
325
326 FiniteElementCollection *Clone(int p) const override
327 { return new H1_FECollection(p, dim, b_type, p_type); }
328
329 int GetConstructorOrder() const override
330 { return base_p; }
331
332 virtual ~H1_FECollection();
333};
334
335/** @brief Arbitrary order H1-conforming (continuous) finite elements with
336 positive basis functions. */
338{
339public:
340 explicit H1Pos_FECollection(const int p, const int dim = 3)
341 : H1_FECollection(p, dim, BasisType::Positive) {}
342};
343
344/** Arbitrary order H1-conforming (continuous) serendipity finite elements;
345 Current implementation works in 2D only; 3D version is in development. */
347{
348public:
349 explicit H1Ser_FECollection(const int p, const int dim = 2)
350 : H1_FECollection(p, dim, BasisType::Serendipity) {}
351};
352
353/** @brief Arbitrary order "H^{1/2}-conforming" trace finite elements defined on
354 the interface between mesh elements (faces,edges,vertices); these are the
355 trace FEs of the H1-conforming FEs. */
357{
358public:
359 H1_Trace_FECollection(const int p, const int dim,
360 const int btype = BasisType::GaussLobatto);
361
362 FiniteElementCollection *Clone(int p) const override
363 { return new H1_Trace_FECollection(p, dim+1, b_type); }
364
365};
366
367/// Arbitrary order "L2-conforming" discontinuous finite elements.
369{
370private:
371 int dim;
372 int b_type; // BasisType
373 int m_type; // map type
374 int p_type; // Pyramid type (0 -> Bergot, 1 -> Fuentes)
375 char d_name[32];
378 int *SegDofOrd[2]; // for rotating segment dofs in 1D
379 int *TriDofOrd[6]; // for rotating triangle dofs in 2D
380 int *TetDofOrd[24]; // for rotating tetrahedron dofs in 3D
381 int *OtherDofOrd; // for rotating other types of elements (for Or == 0)
382
383public:
384 L2_FECollection(const int p, const int dim,
385 const int btype = BasisType::GaussLegendre,
386 const int map_type = FiniteElement::VALUE,
387 const int pyr_type = ScalarPyramid::DefaultType);
388
389 const FiniteElement *
390 FiniteElementForGeometry(Geometry::Type GeomType) const override;
391
392 int DofForGeometry(Geometry::Type GeomType) const override
393 {
394 if (L2_Elements[GeomType])
395 {
396 return L2_Elements[GeomType]->GetDof();
397 }
398 return 0;
399 }
400
401 const int *DofOrderForOrientation(Geometry::Type GeomType,
402 int Or) const override;
403
404 const char *Name() const override { return d_name; }
405
406 int GetContType() const override { return DISCONTINUOUS; }
407
408 const FiniteElement *
410 {
411 return Tr_Elements[GeomType];
412 }
413
414 int GetBasisType() const { return b_type; }
415
416 FiniteElementCollection *Clone(int p) const override
417 { return new L2_FECollection(p, dim, b_type, m_type, p_type); }
418
419 int GetConstructorOrder() const override
420 { return base_p; }
421
422 virtual ~L2_FECollection();
423};
424
425/// Declare an alternative name for L2_FECollection = DG_FECollection
427
428/// Arbitrary order H(div)-conforming Raviart-Thomas finite elements.
430{
431protected:
432 int dim;
433 int cb_type; // closed BasisType
434 int ob_type; // open BasisType
435 char rt_name[32];
438 int *SegDofOrd[2], *TriDofOrd[6], *QuadDofOrd[8];
439
440 // Initialize only the face elements
441 void InitFaces(const int p, const int dim, const int map_type,
442 const bool signs);
443
444 // Constructor used by the constructor of the RT_Trace_FECollection and
445 // DG_Interface_FECollection classes
446 RT_FECollection(const int p, const int dim, const int map_type,
447 const bool signs,
449
450public:
451 /// Construct an H(div)-conforming Raviart-Thomas FE collection, RT_p.
452 /** The index @a p corresponds to the space RT_p, as typically denoted in the
453 literature, which contains vector polynomials of degree up to (p+1).
454 For example, the RT_0 collection contains vector-valued linear functions
455 and, in particular, FiniteElementCollection::GetOrder() will,
456 correspondingly, return order 1. */
457 RT_FECollection(const int p, const int dim,
460
461 const FiniteElement *
462 FiniteElementForGeometry(Geometry::Type GeomType) const override;
463
464 int DofForGeometry(Geometry::Type GeomType) const override
465 { return RT_dof[GeomType]; }
466
467 const int *DofOrderForOrientation(Geometry::Type GeomType,
468 int Or) const override;
469
470 const char *Name() const override { return rt_name; }
471
472 int GetContType() const override { return NORMAL; }
473
475
476 int GetClosedBasisType() const { return cb_type; }
477 int GetOpenBasisType() const { return ob_type; }
478
479 FiniteElementCollection *Clone(int p) const override
480 { return new RT_FECollection(p, dim, cb_type, ob_type); }
481
482 int GetConstructorOrder() const override
483 { return base_p-1; }
484
485 virtual ~RT_FECollection();
486};
487
488/** @brief Arbitrary order "H^{-1/2}-conforming" face finite elements defined on
489 the interface between mesh elements (faces); these are the normal trace FEs
490 of the H(div)-conforming FEs. */
492{
493public:
494 RT_Trace_FECollection(const int p, const int dim,
495 const int map_type = FiniteElement::INTEGRAL,
497
498 FiniteElementCollection *Clone(int p) const override
499 {
500 const int map_type = (strncmp(rt_name, "RT_Trace", 8) == 0)?
502 return new RT_Trace_FECollection(p, dim, map_type, ob_type);
503 }
504};
505
506/** Arbitrary order discontinuous finite elements defined on the interface
507 between mesh elements (faces). The functions in this space are single-valued
508 on each face and are discontinuous across its boundary. */
510{
511public:
512 DG_Interface_FECollection(const int p, const int dim,
513 const int map_type = FiniteElement::VALUE,
515
516 FiniteElementCollection *Clone(int p) const override
517 {
518 const int map_type = (strncmp(rt_name, "DG_Iface", 8) == 0)?
520 return new DG_Interface_FECollection(p, dim, map_type, ob_type);
521 }
522};
523
524/// Arbitrary order H(curl)-conforming Nedelec finite elements.
526{
527protected:
528 int dim;
529 int cb_type; // closed BasisType
530 int ob_type; // open BasisType
531 char nd_name[32];
534 int *SegDofOrd[2], *TriDofOrd[6], *QuadDofOrd[8];
535
536public:
537 ND_FECollection(const int p, const int dim,
540
541 const FiniteElement *
542 FiniteElementForGeometry(Geometry::Type GeomType) const override;
543
544 int DofForGeometry(Geometry::Type GeomType) const override
545 { return ND_dof[GeomType]; }
546
548 DofTransformationForGeometry(Geometry::Type GeomType) const override;
549
550 const int *DofOrderForOrientation(Geometry::Type GeomType,
551 int Or) const override;
552
553 const char *Name() const override { return nd_name; }
554
555 int GetContType() const override { return TANGENTIAL; }
556
558
559 int GetClosedBasisType() const { return cb_type; }
560 int GetOpenBasisType() const { return ob_type; }
561
562 FiniteElementCollection *Clone(int p) const override
563 { return new ND_FECollection(p, dim, cb_type, ob_type); }
564
565 int GetConstructorOrder() const override
566 { return dim>1 ? base_p : base_p+1; }
567
568 virtual ~ND_FECollection();
569};
570
571/** @brief Arbitrary order H(curl)-trace finite elements defined on the
572 interface between mesh elements (faces,edges); these are the tangential
573 trace FEs of the H(curl)-conforming FEs. */
575{
576public:
577 ND_Trace_FECollection(const int p, const int dim,
580
581 FiniteElementCollection *Clone(int p) const override
582 { return new ND_Trace_FECollection(p, dim+1, cb_type, ob_type); }
583};
584
585/// Arbitrary order 3D H(curl)-conforming Nedelec finite elements in 1D.
587{
588protected:
589 char nd_name[32];
592
593public:
594 ND_R1D_FECollection(const int p, const int dim,
595 const int cb_type = BasisType::GaussLobatto,
596 const int ob_type = BasisType::GaussLegendre);
597
598 const FiniteElement *
600 { return ND_Elements[GeomType]; }
601
602 int DofForGeometry(Geometry::Type GeomType) const override
603 { return ND_dof[GeomType]; }
604
605 const int *DofOrderForOrientation(Geometry::Type GeomType,
606 int Or) const override;
607
608 const char *Name() const override { return nd_name; }
609
610 int GetContType() const override { return TANGENTIAL; }
611
613
614 virtual ~ND_R1D_FECollection();
615};
616
617/// Arbitrary order 3D H(div)-conforming Raviart-Thomas finite elements in 1D.
619{
620protected:
621 char rt_name[32];
624
625public:
626 RT_R1D_FECollection(const int p, const int dim,
627 const int cb_type = BasisType::GaussLobatto,
628 const int ob_type = BasisType::GaussLegendre);
629
630 const FiniteElement *
632 { return RT_Elements[GeomType]; }
633
634 int DofForGeometry(Geometry::Type GeomType) const override
635 { return RT_dof[GeomType]; }
636
637 const int *DofOrderForOrientation(Geometry::Type GeomType,
638 int Or) const override;
639
640 const char *Name() const override { return rt_name; }
641
642 int GetContType() const override { return NORMAL; }
643
645
646 virtual ~RT_R1D_FECollection();
647};
648
649/// Arbitrary order 3D H(curl)-conforming Nedelec finite elements in 2D.
651{
652protected:
653 char nd_name[32];
656 int *SegDofOrd[2];
657
658public:
659 ND_R2D_FECollection(const int p, const int dim,
660 const int cb_type = BasisType::GaussLobatto,
661 const int ob_type = BasisType::GaussLegendre);
662
663 const FiniteElement *
665 { return ND_Elements[GeomType]; }
666
667 int DofForGeometry(Geometry::Type GeomType) const override
668 { return ND_dof[GeomType]; }
669
670 const int *DofOrderForOrientation(Geometry::Type GeomType,
671 int Or) const override;
672
673 const char *Name() const override { return nd_name; }
674
675 int GetContType() const override { return TANGENTIAL; }
676
678
679 virtual ~ND_R2D_FECollection();
680};
681
682/** @brief Arbitrary order 3D H(curl)-trace finite elements in 2D defined on the
683 interface between mesh elements (edges); these are the tangential
684 trace FEs of the H(curl)-conforming FEs. */
686{
687public:
688 ND_R2D_Trace_FECollection(const int p, const int dim,
689 const int cb_type = BasisType::GaussLobatto,
690 const int ob_type = BasisType::GaussLegendre);
691};
692
693/// Arbitrary order 3D H(div)-conforming Raviart-Thomas finite elements in 2D.
695{
696protected:
697 int ob_type; // open BasisType
698 char rt_name[32];
701 int *SegDofOrd[2];
702
703 // Initialize only the face elements
704 void InitFaces(const int p, const int dim, const int map_type,
705 const bool signs);
706
707 // Constructor used by the constructor of the RT_R2D_Trace_FECollection
708 RT_R2D_FECollection(const int p, const int dim, const int map_type,
709 const bool signs,
711
712public:
713 RT_R2D_FECollection(const int p, const int dim,
714 const int cb_type = BasisType::GaussLobatto,
716
717 const FiniteElement *
719 { return RT_Elements[GeomType]; }
720
721 int DofForGeometry(Geometry::Type GeomType) const override
722 { return RT_dof[GeomType]; }
723
724 const int *DofOrderForOrientation(Geometry::Type GeomType,
725 int Or) const override;
726
727 const char *Name() const override { return rt_name; }
728
729 int GetContType() const override { return NORMAL; }
730
732
733 virtual ~RT_R2D_FECollection();
734};
735
736/** @brief Arbitrary order 3D "H^{-1/2}-conforming" face finite elements defined on
737 the interface between mesh elements (faces); these are the normal trace FEs
738 of the H(div)-conforming FEs. */
740{
741public:
742 RT_R2D_Trace_FECollection(const int p, const int dim,
743 const int map_type = FiniteElement::INTEGRAL,
745};
746
747/// Arbitrary order non-uniform rational B-splines (NURBS) finite elements.
749{
750protected:
755
756 mutable int mOrder; // >= 1 or VariableOrder
757 // The 'name' can be:
758 // 1) name = "NURBS" + "number", for fixed order, or
759 // 2) name = "NURBS", for VariableOrder.
760 // The name is updated before writing it to a stream, for example, see
761 // FiniteElementSpace::Save().
762 mutable char name[16];
763
764public:
765 enum { VariableOrder = -1 };
766
767 /** @brief The parameter @a Order must be either a positive number, for fixed
768 order, or VariableOrder (default). */
769 explicit NURBSFECollection(int Order = VariableOrder);
770
771 virtual void Reset() const
772 {
773 SegmentFE->Reset();
776 }
777
778 virtual void SetDim(const int dim) {};
779
780 /** @brief Get the order of the NURBS collection: either a positive number,
781 when using fixed order, or VariableOrder. */
782 /** @note Not to be confused with FiniteElementCollection::GetOrder(). */
783 int GetOrder() const { return mOrder; }
784
785 /** @brief Set the order and the name, based on the given @a Order: either a
786 positive number for fixed order, or VariableOrder. */
787 virtual void SetOrder(int Order) const;
788
789 const FiniteElement *
790 FiniteElementForGeometry(Geometry::Type GeomType) const override;
791
792 int DofForGeometry(Geometry::Type GeomType) const override;
793
794 const int *DofOrderForOrientation(Geometry::Type GeomType,
795 int Or) const override;
796
797 const char *Name() const override { return name; }
798
799 int GetContType() const override { return CONTINUOUS; }
800
802
803 virtual ~NURBSFECollection();
804};
805
806/// Arbitrary order H(div) NURBS finite elements.
808{
809private:
810
811 NURBS1DFiniteElement *SegmentFE;
812 NURBS2DFiniteElement *QuadrilateralFE;
813
814 NURBS_HDiv2DFiniteElement *QuadrilateralVFE;
815 NURBS_HDiv3DFiniteElement *ParallelepipedVFE;
816
817 FiniteElement *sFE;
818 FiniteElement *qFE;
819 FiniteElement *hFE;
820
821public:
822
823 /** @brief The parameter @a Order must be either a positive number, for fixed
824 order, or VariableOrder (default). */
825 explicit NURBS_HDivFECollection(int Order = VariableOrder, const int vdim = -1);
826
827 void Reset() const override
828 {
829 SegmentFE->Reset();
830 QuadrilateralFE->Reset();
831 QuadrilateralVFE->Reset();
832 ParallelepipedVFE->Reset();
833 }
834
835 void SetDim(const int dim) override;
836
837 /** @brief Set the order and the name, based on the given @a Order: either a
838 positive number for fixed order, or VariableOrder. */
839 void SetOrder(int Order) const override;
840
841 const FiniteElement *
842 FiniteElementForGeometry(Geometry::Type GeomType) const override;
843
844 int DofForGeometry(Geometry::Type GeomType) const override;
845
846 const int *DofOrderForOrientation(Geometry::Type GeomType,
847 int Or) const override;
848
849 const char *Name() const override { return name; }
850
851 int GetContType() const override { return CONTINUOUS; }
852
854
855 virtual ~NURBS_HDivFECollection();
856};
857
858/// Arbitrary order H(curl) NURBS finite elements.
860{
861private:
862 NURBS1DFiniteElement *SegmentFE;
863 NURBS2DFiniteElement *QuadrilateralFE;
864
865 NURBS_HCurl2DFiniteElement *QuadrilateralVFE;
866 NURBS_HCurl3DFiniteElement *ParallelepipedVFE;
867
868 FiniteElement *sFE;
869 FiniteElement *qFE;
870 FiniteElement *hFE;
871public:
872
873 /** @brief The parameter @a Order must be either a positive number, for fixed
874 order, or VariableOrder (default). */
875 explicit NURBS_HCurlFECollection(int Order = VariableOrder,
876 const int vdim = -1);
877
878 void Reset() const override
879 {
880 SegmentFE->Reset();
881 QuadrilateralFE->Reset();
882 QuadrilateralVFE->Reset();
883 ParallelepipedVFE->Reset();
884 }
885
886 void SetDim(const int dim) override;
887
888 /** @brief Set the order and the name, based on the given @a Order: either a
889 positive number for fixed order, or VariableOrder. */
890 void SetOrder(int Order) const override;
891
892 const FiniteElement *
893 FiniteElementForGeometry(Geometry::Type GeomType) const override;
894
895 int DofForGeometry(Geometry::Type GeomType) const override;
896
897 const int *DofOrderForOrientation(Geometry::Type GeomType,
898 int Or) const override;
899
900 const char *Name() const override { return name; }
901
902 int GetContType() const override { return CONTINUOUS; }
903
905
906 virtual ~NURBS_HCurlFECollection();
907};
908
909/// Piecewise-(bi/tri)linear continuous finite elements.
911{
912private:
913 const PointFiniteElement PointFE;
914 const Linear1DFiniteElement SegmentFE;
915 const Linear2DFiniteElement TriangleFE;
916 const BiLinear2DFiniteElement QuadrilateralFE;
917 const Linear3DFiniteElement TetrahedronFE;
918 const TriLinear3DFiniteElement ParallelepipedFE;
919 const LinearWedgeFiniteElement WedgeFE;
920 const LinearPyramidFiniteElement PyramidFE;
921public:
923
924 const FiniteElement *
925 FiniteElementForGeometry(Geometry::Type GeomType) const override;
926
927 int DofForGeometry(Geometry::Type GeomType) const override;
928
929 const int *DofOrderForOrientation(Geometry::Type GeomType,
930 int Or) const override;
931
932 const char *Name() const override { return "Linear"; }
933
934 int GetContType() const override { return CONTINUOUS; }
935};
936
937/// Piecewise-(bi)quadratic continuous finite elements.
939{
940private:
941 const PointFiniteElement PointFE;
942 const Quad1DFiniteElement SegmentFE;
943 const Quad2DFiniteElement TriangleFE;
944 const BiQuad2DFiniteElement QuadrilateralFE;
945 const Quadratic3DFiniteElement TetrahedronFE;
946 const LagrangeHexFiniteElement ParallelepipedFE;
947 const H1_WedgeElement WedgeFE;
948
949public:
951 : FiniteElementCollection(2), ParallelepipedFE(2), WedgeFE(2) {}
952
953 const FiniteElement *
954 FiniteElementForGeometry(Geometry::Type GeomType) const override;
955
956 int DofForGeometry(Geometry::Type GeomType) const override;
957
958 const int *DofOrderForOrientation(Geometry::Type GeomType,
959 int Or) const override;
960
961 const char *Name() const override { return "Quadratic"; }
962
963 int GetContType() const override { return CONTINUOUS; }
964};
965
966/// Version of QuadraticFECollection with positive basis functions.
968{
969private:
970 const QuadPos1DFiniteElement SegmentFE;
971 const BiQuadPos2DFiniteElement QuadrilateralFE;
972
973public:
975
976 const FiniteElement *
977 FiniteElementForGeometry(Geometry::Type GeomType) const override;
978
979 int DofForGeometry(Geometry::Type GeomType) const override;
980
981 const int *DofOrderForOrientation(Geometry::Type GeomType,
982 int Or) const override;
983
984 const char *Name() const override { return "QuadraticPos"; }
985
986 int GetContType() const override { return CONTINUOUS; }
987};
988
989/// Piecewise-(bi)cubic continuous finite elements.
991{
992private:
993 const PointFiniteElement PointFE;
994 const Cubic1DFiniteElement SegmentFE;
995 const Cubic2DFiniteElement TriangleFE;
996 const BiCubic2DFiniteElement QuadrilateralFE;
997 const Cubic3DFiniteElement TetrahedronFE;
998 const LagrangeHexFiniteElement ParallelepipedFE;
999 const H1_WedgeElement WedgeFE;
1000
1001public:
1004 ParallelepipedFE(3), WedgeFE(3, BasisType::ClosedUniform)
1005 {}
1006
1007 const FiniteElement *
1008 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1009
1010 int DofForGeometry(Geometry::Type GeomType) const override;
1011
1012 const int *DofOrderForOrientation(Geometry::Type GeomType,
1013 int Or) const override;
1014
1015 const char *Name() const override { return "Cubic"; }
1016
1017 int GetContType() const override { return CONTINUOUS; }
1018};
1019
1020/// Crouzeix-Raviart nonconforming elements in 2D.
1022{
1023private:
1024 const P0SegmentFiniteElement SegmentFE;
1025 const CrouzeixRaviartFiniteElement TriangleFE;
1026 const CrouzeixRaviartQuadFiniteElement QuadrilateralFE;
1027public:
1029
1030 const FiniteElement *
1031 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1032
1033 int DofForGeometry(Geometry::Type GeomType) const override;
1034
1035 const int *DofOrderForOrientation(Geometry::Type GeomType,
1036 int Or) const override;
1037
1038 const char *Name() const override { return "CrouzeixRaviart"; }
1039
1040 int GetContType() const override { return DISCONTINUOUS; }
1041};
1042
1043/// Piecewise-linear nonconforming finite elements in 3D.
1045{
1046private:
1047 const P0TriangleFiniteElement TriangleFE;
1048 const P1TetNonConfFiniteElement TetrahedronFE;
1049 const P0QuadFiniteElement QuadrilateralFE;
1050 const RotTriLinearHexFiniteElement ParallelepipedFE;
1051
1052public:
1054
1055 const FiniteElement *
1056 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1057
1058 int DofForGeometry(Geometry::Type GeomType) const override;
1059
1060 const int *DofOrderForOrientation(Geometry::Type GeomType,
1061 int Or) const override;
1062
1063 const char *Name() const override { return "LinearNonConf3D"; }
1064
1065 int GetContType() const override { return DISCONTINUOUS; }
1066};
1067
1068/** @brief First order Raviart-Thomas finite elements in 2D. This class is kept
1069 only for backward compatibility, consider using RT_FECollection instead. */
1071{
1072private:
1073 const P0SegmentFiniteElement SegmentFE; // normal component on edge
1074 const RT0TriangleFiniteElement TriangleFE;
1075 const RT0QuadFiniteElement QuadrilateralFE;
1076public:
1078
1079 const FiniteElement *
1080 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1081
1082 int DofForGeometry(Geometry::Type GeomType) const override;
1083
1084 const int *DofOrderForOrientation(Geometry::Type GeomType,
1085 int Or) const override;
1086
1087 const char *Name() const override { return "RT0_2D"; }
1088
1089 int GetContType() const override { return NORMAL; }
1090};
1091
1092/** @brief Second order Raviart-Thomas finite elements in 2D. This class is kept
1093 only for backward compatibility, consider using RT_FECollection instead. */
1095{
1096private:
1097 const P1SegmentFiniteElement SegmentFE; // normal component on edge
1098 const RT1TriangleFiniteElement TriangleFE;
1099 const RT1QuadFiniteElement QuadrilateralFE;
1100public:
1102
1103 const FiniteElement *
1104 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1105
1106 int DofForGeometry(Geometry::Type GeomType) const override;
1107
1108 const int *DofOrderForOrientation(Geometry::Type GeomType,
1109 int Or) const override;
1110
1111 const char *Name() const override { return "RT1_2D"; }
1112
1113 int GetContType() const override { return NORMAL; }
1114};
1115
1116/** @brief Third order Raviart-Thomas finite elements in 2D. This class is kept
1117 only for backward compatibility, consider using RT_FECollection instead. */
1119{
1120private:
1121 const P2SegmentFiniteElement SegmentFE; // normal component on edge
1122 const RT2TriangleFiniteElement TriangleFE;
1123 const RT2QuadFiniteElement QuadrilateralFE;
1124public:
1126
1127 const FiniteElement *
1128 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1129
1130 int DofForGeometry(Geometry::Type GeomType) const override;
1131
1132 const int *DofOrderForOrientation(Geometry::Type GeomType,
1133 int Or) const override;
1134
1135 const char *Name() const override { return "RT2_2D"; }
1136
1137 int GetContType() const override { return NORMAL; }
1138};
1139
1140/** @brief Piecewise-constant discontinuous finite elements in 2D. This class is
1141 kept only for backward compatibility, consider using L2_FECollection
1142 instead. */
1144{
1145private:
1146 const P0TriangleFiniteElement TriangleFE;
1147 const P0QuadFiniteElement QuadrilateralFE;
1148public:
1150
1151 const FiniteElement *
1152 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1153
1154 int DofForGeometry(Geometry::Type GeomType) const override;
1155
1156 const int *DofOrderForOrientation(Geometry::Type GeomType,
1157 int Or) const override;
1158
1159 const char *Name() const override { return "Const2D"; }
1160
1161 int GetContType() const override { return DISCONTINUOUS; }
1162};
1163
1164/** @brief Piecewise-linear discontinuous finite elements in 2D. This class is
1165 kept only for backward compatibility, consider using L2_FECollection
1166 instead. */
1168{
1169private:
1170 const Linear2DFiniteElement TriangleFE;
1171 const BiLinear2DFiniteElement QuadrilateralFE;
1172
1173public:
1175
1176 const FiniteElement *
1177 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1178
1179 int DofForGeometry(Geometry::Type GeomType) const override;
1180
1181 const int *DofOrderForOrientation(Geometry::Type GeomType,
1182 int Or) const override;
1183
1184 const char *Name() const override { return "LinearDiscont2D"; }
1185
1186 int GetContType() const override { return DISCONTINUOUS; }
1187};
1188
1189/// Version of LinearDiscont2DFECollection with dofs in the Gaussian points.
1191{
1192private:
1193 // const CrouzeixRaviartFiniteElement TriangleFE;
1194 const GaussLinear2DFiniteElement TriangleFE;
1195 const GaussBiLinear2DFiniteElement QuadrilateralFE;
1196
1197public:
1199
1200 const FiniteElement *
1201 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1202
1203 int DofForGeometry(Geometry::Type GeomType) const override;
1204
1205 const int *DofOrderForOrientation(Geometry::Type GeomType,
1206 int Or) const override;
1207
1208 const char *Name() const override { return "GaussLinearDiscont2D"; }
1209
1210 int GetContType() const override { return DISCONTINUOUS; }
1211};
1212
1213/// Linear (P1) finite elements on quadrilaterals.
1215{
1216private:
1217 const P1OnQuadFiniteElement QuadrilateralFE;
1218public:
1220
1221 const FiniteElement *
1222 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1223
1224 int DofForGeometry(Geometry::Type GeomType) const override;
1225
1226 const int *DofOrderForOrientation(Geometry::Type GeomType,
1227 int Or) const override;
1228
1229 const char *Name() const override { return "P1OnQuad"; }
1230
1231 int GetContType() const override { return DISCONTINUOUS; }
1232};
1233
1234/** @brief Piecewise-quadratic discontinuous finite elements in 2D. This class
1235 is kept only for backward compatibility, consider using L2_FECollection
1236 instead. */
1238{
1239private:
1240 const Quad2DFiniteElement TriangleFE;
1241 const BiQuad2DFiniteElement QuadrilateralFE;
1242
1243public:
1245
1246 const FiniteElement *
1247 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1248
1249 int DofForGeometry(Geometry::Type GeomType) const override;
1250
1251 const int *DofOrderForOrientation(Geometry::Type GeomType,
1252 int Or) const override;
1253
1254 const char *Name() const override { return "QuadraticDiscont2D"; }
1255
1256 int GetContType() const override { return DISCONTINUOUS; }
1257};
1258
1259/// Version of QuadraticDiscont2DFECollection with positive basis functions.
1261{
1262private:
1263 const BiQuadPos2DFiniteElement QuadrilateralFE;
1264
1265public:
1267
1268 const FiniteElement *
1269 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1270
1271 int DofForGeometry(Geometry::Type GeomType) const override;
1272
1274 int Or) const override
1275 { return NULL; }
1276
1277 const char *Name() const override { return "QuadraticPosDiscont2D"; }
1278
1279 int GetContType() const override { return DISCONTINUOUS; }
1280};
1281
1282/// Version of QuadraticDiscont2DFECollection with dofs in the Gaussian points.
1284{
1285private:
1286 // const Quad2DFiniteElement TriangleFE;
1287 const GaussQuad2DFiniteElement TriangleFE;
1288 const GaussBiQuad2DFiniteElement QuadrilateralFE;
1289
1290public:
1292
1293 const FiniteElement *
1294 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1295
1296 int DofForGeometry(Geometry::Type GeomType) const override;
1297
1298 const int *DofOrderForOrientation(Geometry::Type GeomType,
1299 int Or) const override;
1300
1301 const char *Name() const override { return "GaussQuadraticDiscont2D"; }
1302
1303 int GetContType() const override { return DISCONTINUOUS; }
1304};
1305
1306/** @brief Piecewise-cubic discontinuous finite elements in 2D. This class is
1307 kept only for backward compatibility, consider using L2_FECollection
1308 instead. */
1310{
1311private:
1312 const Cubic2DFiniteElement TriangleFE;
1313 const BiCubic2DFiniteElement QuadrilateralFE;
1314
1315public:
1317
1318 const FiniteElement *
1319 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1320
1321 int DofForGeometry(Geometry::Type GeomType) const override;
1322
1323 const int *DofOrderForOrientation(Geometry::Type GeomType,
1324 int Or) const override;
1325
1326 const char *Name() const override { return "CubicDiscont2D"; }
1327
1328 int GetContType() const override { return DISCONTINUOUS; }
1329};
1330
1331/** @brief Piecewise-constant discontinuous finite elements in 3D. This class is
1332 kept only for backward compatibility, consider using L2_FECollection
1333 instead. */
1335{
1336private:
1337 const P0TetFiniteElement TetrahedronFE;
1338 const P0HexFiniteElement ParallelepipedFE;
1339 const P0WdgFiniteElement WedgeFE;
1340 const P0PyrFiniteElement PyramidFE;
1341
1342public:
1344
1345 const FiniteElement *
1346 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1347
1348 int DofForGeometry(Geometry::Type GeomType) const override;
1349
1350 const int *DofOrderForOrientation(Geometry::Type GeomType,
1351 int Or) const override;
1352
1353 const char *Name() const override { return "Const3D"; }
1354
1355 int GetContType() const override { return DISCONTINUOUS; }
1356};
1357
1358/** @brief Piecewise-linear discontinuous finite elements in 3D. This class is
1359 kept only for backward compatibility, consider using L2_FECollection
1360 instead. */
1362{
1363private:
1364 const Linear3DFiniteElement TetrahedronFE;
1365 const LinearPyramidFiniteElement PyramidFE;
1366 const LinearWedgeFiniteElement WedgeFE;
1367 const TriLinear3DFiniteElement ParallelepipedFE;
1368
1369public:
1371
1372 const FiniteElement *
1373 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1374
1375 int DofForGeometry(Geometry::Type GeomType) const override;
1376
1377 const int *DofOrderForOrientation(Geometry::Type GeomType,
1378 int Or) const override;
1379
1380 const char *Name() const override { return "LinearDiscont3D"; }
1381
1382 int GetContType() const override { return DISCONTINUOUS; }
1383};
1384
1385/** @brief Piecewise-quadratic discontinuous finite elements in 3D. This class
1386 is kept only for backward compatibility, consider using L2_FECollection
1387 instead. */
1389{
1390private:
1391 const Quadratic3DFiniteElement TetrahedronFE;
1392 const LagrangeHexFiniteElement ParallelepipedFE;
1393
1394public:
1396 : FiniteElementCollection(2), ParallelepipedFE(2) {}
1397
1398 const FiniteElement *
1399 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1400
1401 int DofForGeometry(Geometry::Type GeomType) const override;
1402
1403 const int *DofOrderForOrientation(Geometry::Type GeomType,
1404 int Or) const override;
1405
1406 const char *Name() const override { return "QuadraticDiscont3D"; }
1407
1408 int GetContType() const override { return DISCONTINUOUS; }
1409};
1410
1411/// Finite element collection on a macro-element.
1413{
1414private:
1415 const PointFiniteElement PointFE;
1416 const RefinedLinear1DFiniteElement SegmentFE;
1417 const RefinedLinear2DFiniteElement TriangleFE;
1418 const RefinedBiLinear2DFiniteElement QuadrilateralFE;
1419 const RefinedLinear3DFiniteElement TetrahedronFE;
1420 const RefinedTriLinear3DFiniteElement ParallelepipedFE;
1421
1422public:
1424
1425 const FiniteElement *
1426 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1427
1428 int DofForGeometry(Geometry::Type GeomType) const override;
1429
1430 const int *DofOrderForOrientation(Geometry::Type GeomType,
1431 int Or) const override;
1432
1433 const char *Name() const override { return "RefinedLinear"; }
1434
1435 int GetContType() const override { return CONTINUOUS; }
1436};
1437
1438/** @brief Lowest order Nedelec finite elements in 3D. This class is kept only
1439 for backward compatibility, consider using the new ND_FECollection
1440 instead. */
1442{
1443private:
1444 const Nedelec1HexFiniteElement HexahedronFE;
1445 const Nedelec1TetFiniteElement TetrahedronFE;
1446 const Nedelec1WdgFiniteElement WedgeFE;
1447 const Nedelec1PyrFiniteElement PyramidFE;
1448
1449public:
1451
1452 const FiniteElement *
1453 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1454
1455 int DofForGeometry(Geometry::Type GeomType) const override;
1456
1457 const int *DofOrderForOrientation(Geometry::Type GeomType,
1458 int Or) const override;
1459
1460 const char *Name() const override { return "ND1_3D"; }
1461
1462 int GetContType() const override { return TANGENTIAL; }
1463};
1464
1465/** @brief First order Raviart-Thomas finite elements in 3D. This class is kept
1466 only for backward compatibility, consider using RT_FECollection instead. */
1468{
1469private:
1470 const P0TriangleFiniteElement TriangleFE;
1471 const P0QuadFiniteElement QuadrilateralFE;
1472 const RT0HexFiniteElement HexahedronFE;
1473 const RT0TetFiniteElement TetrahedronFE;
1474 const RT0WdgFiniteElement WedgeFE;
1475 const RT0PyrFiniteElement PyramidFE;
1476public:
1478
1479 const FiniteElement *
1480 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1481
1482 int DofForGeometry(Geometry::Type GeomType) const override;
1483
1484 const int *DofOrderForOrientation(Geometry::Type GeomType,
1485 int Or) const override;
1486
1487 const char *Name() const override { return "RT0_3D"; }
1488
1489 int GetContType() const override { return NORMAL; }
1490};
1491
1492/** @brief Second order Raviart-Thomas finite elements in 3D. This class is kept
1493 only for backward compatibility, consider using RT_FECollection instead. */
1495{
1496private:
1497 const Linear2DFiniteElement TriangleFE;
1498 const BiLinear2DFiniteElement QuadrilateralFE;
1499 const RT1HexFiniteElement HexahedronFE;
1500public:
1502
1503 const FiniteElement *
1504 FiniteElementForGeometry(Geometry::Type GeomType) const override;
1505
1506 int DofForGeometry(Geometry::Type GeomType) const override;
1507
1508 const int *DofOrderForOrientation(Geometry::Type GeomType,
1509 int Or) const override;
1510
1511 const char *Name() const override { return "RT1_3D"; }
1512
1513 int GetContType() const override { return NORMAL; }
1514};
1515
1516/// Discontinuous collection defined locally by a given finite element.
1518{
1519private:
1520 char d_name[32];
1521 Geometry::Type GeomType;
1522 FiniteElement *Local_Element;
1523
1524public:
1525 Local_FECollection(const char *fe_name);
1526
1527 const FiniteElement *
1529 { return (GeomType == GeomType_) ? Local_Element : NULL; }
1530
1531 int DofForGeometry(Geometry::Type GeomType_) const override
1532 { return (GeomType == GeomType_) ? Local_Element->GetDof() : 0; }
1533
1535 int Or) const override
1536 { return NULL; }
1537
1538 const char *Name() const override { return d_name; }
1539
1540 int GetContType() const override { return DISCONTINUOUS; }
1541
1542 virtual ~Local_FECollection() { delete Local_Element; }
1543};
1544
1545}
1546
1547#endif
Possible basis types. Note that not all elements can use all BasisType(s).
Definition fe_base.hpp:30
@ GaussLobatto
Closed type.
Definition fe_base.hpp:36
@ GaussLegendre
Open type.
Definition fe_base.hpp:35
A 2D bi-cubic element on a square with uniformly spaces nodes.
A 2D bi-linear element on a square with nodes at the vertices of the square.
A 2D bi-quadratic element on a square with uniformly spaced nodes.
Piecewise-constant discontinuous finite elements in 2D. This class is kept only for backward compatib...
Definition fe_coll.hpp:1144
const char * Name() const override
Definition fe_coll.hpp:1159
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1112
int GetContType() const override
Definition fe_coll.hpp:1161
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1126
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1099
Piecewise-constant discontinuous finite elements in 3D. This class is kept only for backward compatib...
Definition fe_coll.hpp:1335
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1439
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1424
int GetContType() const override
Definition fe_coll.hpp:1355
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1457
const char * Name() const override
Definition fe_coll.hpp:1353
Crouzeix-Raviart nonconforming elements in 2D.
Definition fe_coll.hpp:1022
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:947
const char * Name() const override
Definition fe_coll.hpp:1038
int GetContType() const override
Definition fe_coll.hpp:1040
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:961
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:932
A 2D Crouzeix-Raviart element on triangle.
A 2D Crouzeix-Raviart finite element on square.
A 1D cubic element with uniformly spaced nodes.
A 2D cubic element on a triangle with uniformly spaced nodes.
Piecewise-cubic discontinuous finite elements in 2D. This class is kept only for backward compatibili...
Definition fe_coll.hpp:1310
const char * Name() const override
Definition fe_coll.hpp:1326
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1374
int GetContType() const override
Definition fe_coll.hpp:1328
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1360
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1346
Piecewise-(bi)cubic continuous finite elements.
Definition fe_coll.hpp:991
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:880
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:897
const char * Name() const override
Definition fe_coll.hpp:1015
int GetContType() const override
Definition fe_coll.hpp:1017
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:862
FiniteElementCollection * Clone(int p) const override
Instantiate a new collection of the same type with a different order.
Definition fe_coll.hpp:516
DG_Interface_FECollection(const int p, const int dim, const int map_type=FiniteElement::VALUE, const int ob_type=BasisType::GaussLegendre)
Definition fe_coll.cpp:2803
Collection of finite elements from the same family in multiple dimensions. This class is used to matc...
Definition fe_coll.hpp:27
ErrorMode error_mode
How to treat errors in FiniteElementForGeometry() calls.
Definition fe_coll.hpp:286
virtual const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const =0
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
int GetRangeType(int dim) const
Definition fe_coll.cpp:40
static FiniteElementCollection * New(const char *name)
Factory method: return a newly allocated FiniteElementCollection according to the given name.
Definition fe_coll.cpp:124
const int * GetDofOrdering(Geometry::Type geom, int p, int ori) const
Variable order version of DofOrderForOrientation().
Definition fe_coll.hpp:238
int GetOrder() const
Return the order (polynomial degree) of the FE collection, corresponding to the order/degree returned...
Definition fe_coll.hpp:248
virtual int GetContType() const =0
int HasFaceDofs(Geometry::Type geom, int p) const
Definition fe_coll.cpp:100
int GetDerivRangeType(int dim) const
Definition fe_coll.cpp:50
virtual FiniteElementCollection * Clone(int p) const
Instantiate a new collection of the same type with a different order.
Definition fe_coll.cpp:462
virtual int DofForGeometry(Geometry::Type GeomType) const =0
int GetNumDof(Geometry::Type geom, int p) const
Variable order version of DofForGeometry().
Definition fe_coll.hpp:226
virtual const FiniteElement * TraceFiniteElementForGeometry(Geometry::Type GeomType) const
Definition fe_coll.hpp:97
const FiniteElement * GetTraceFE(Geometry::Type geom, int p) const
Variable order version of TraceFiniteElementForGeometry().
Definition fe_coll.hpp:214
virtual const FiniteElement * FiniteElementForDim(int dim) const
Returns the first non-NULL FiniteElement for the given dimension.
Definition fe_coll.cpp:26
static void GetEdge(int &nv, v_t &v, int &ne, int &e, int &eo, const int edge_info)
Definition fe_coll.cpp:498
void InitVarOrder(int p) const
Definition fe_coll.cpp:470
int GetDerivType(int dim) const
Definition fe_coll.cpp:70
const int base_p
Order as returned by GetOrder().
Definition fe_coll.hpp:266
virtual const char * Name() const
Definition fe_coll.hpp:79
int GetRangeDim(int dim) const
Definition fe_coll.cpp:90
int GetDerivMapType(int dim) const
Definition fe_coll.cpp:80
static void GetFace(int &nv, v_t &v, int &ne, e_t &e, eo_t &eo, int &nf, int &f, Geometry::Type &fg, int &fo, const int face_info)
Definition fe_coll.cpp:518
virtual const StatelessDofTransformation * DofTransformationForGeometry(Geometry::Type GeomType) const
Returns a DoF transformation object compatible with this basis and geometry type.
Definition fe_coll.hpp:67
int GetMapType(int dim) const
Definition fe_coll.cpp:60
const FiniteElement * GetFE(Geometry::Type geom, int p) const
Variable order version of FiniteElementForGeometry().
Definition fe_coll.hpp:203
@ DISCONTINUOUS
Field is discontinuous across element interfaces.
Definition fe_coll.hpp:48
@ CONTINUOUS
Field is continuous across element interfaces.
Definition fe_coll.hpp:45
@ NORMAL
Normal component of vector field.
Definition fe_coll.hpp:47
@ TANGENTIAL
Tangential components of vector field.
Definition fe_coll.hpp:46
Array< FiniteElementCollection * > var_orders
Definition fe_coll.hpp:273
virtual const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const =0
virtual int GetConstructorOrder() const
Return the order parameter used to construct this collection. This differs from GetOrder() depending ...
Definition fe_coll.hpp:259
virtual FiniteElementCollection * GetTraceCollection() const
Returns a collection of the trace elements.
Definition fe_coll.cpp:118
void SubDofOrder(Geometry::Type Geom, int SDim, int Info, Array< int > &dofs) const
Get the local dofs for a given sub-manifold.
Definition fe_coll.cpp:563
static void GetNVE(int &nv, int &ne)
Definition fe_coll.cpp:488
ErrorMode
How to treat errors in FiniteElementForGeometry() calls.
Definition fe_coll.hpp:277
@ RETURN_NULL
Return NULL on errors.
Definition fe_coll.hpp:278
Abstract class for all finite elements.
Definition fe_base.hpp:294
int GetDof() const
Returns the number of degrees of freedom in the finite element.
Definition fe_base.hpp:410
A 2D bi-linear element on a square with nodes at the "Gaussian" points.
A 2D bi-quadratic element on a square with nodes at the 9 "Gaussian" points.
A linear element on a triangle with nodes at the 3 "Gaussian" points.
Version of LinearDiscont2DFECollection with dofs in the Gaussian points.
Definition fe_coll.hpp:1191
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1201
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1170
const char * Name() const override
Definition fe_coll.hpp:1208
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1185
A quadratic element on triangle with nodes at the "Gaussian" points.
Version of QuadraticDiscont2DFECollection with dofs in the Gaussian points.
Definition fe_coll.hpp:1284
const char * Name() const override
Definition fe_coll.hpp:1301
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1322
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1306
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1338
static const int NumGeom
Definition geom.hpp:46
Arbitrary order H1-conforming (continuous) finite elements with positive basis functions.
Definition fe_coll.hpp:338
H1Pos_FECollection(const int p, const int dim=3)
Definition fe_coll.hpp:340
H1Ser_FECollection(const int p, const int dim=2)
Definition fe_coll.hpp:349
Arbitrary order H1-conforming (continuous) finite elements.
Definition fe_coll.hpp:291
H1_FECollection(const int p, const int dim=3, const int btype=BasisType::GaussLobatto, const int pyr_type=ScalarPyramid::DefaultType)
Definition fe_coll.cpp:1741
FiniteElementCollection * Clone(int p) const override
Instantiate a new collection of the same type with a different order.
Definition fe_coll.hpp:326
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:2082
virtual ~H1_FECollection()
Definition fe_coll.cpp:2153
int GetBasisType() const
Definition fe_coll.hpp:317
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:307
FiniteElementCollection * GetTraceCollection() const override
Returns a collection of the trace elements.
Definition fe_coll.cpp:2109
const char * Name() const override
Definition fe_coll.hpp:313
int GetConstructorOrder() const override
Return the order parameter used to construct this collection. This differs from GetOrder() depending ...
Definition fe_coll.hpp:329
int GetContType() const override
Definition fe_coll.hpp:315
int H1_dof[Geometry::NumGeom]
Definition fe_coll.hpp:296
FiniteElement * H1_Elements[Geometry::NumGeom]
Definition fe_coll.hpp:295
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:2087
const int * GetDofMap(Geometry::Type GeomType) const
Get the Cartesian to local H1 dof map.
Definition fe_coll.cpp:2128
Arbitrary order "H^{1/2}-conforming" trace finite elements defined on the interface between mesh elem...
Definition fe_coll.hpp:357
FiniteElementCollection * Clone(int p) const override
Instantiate a new collection of the same type with a different order.
Definition fe_coll.hpp:362
H1_Trace_FECollection(const int p, const int dim, const int btype=BasisType::GaussLobatto)
Definition fe_coll.cpp:2166
Arbitrary order H1 elements in 3D on a wedge.
Definition fe_h1.hpp:132
Arbitrary order "L2-conforming" discontinuous finite elements.
Definition fe_coll.hpp:369
const FiniteElement * TraceFiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:409
int GetConstructorOrder() const override
Return the order parameter used to construct this collection. This differs from GetOrder() depending ...
Definition fe_coll.hpp:419
int GetBasisType() const
Definition fe_coll.hpp:414
virtual ~L2_FECollection()
Definition fe_coll.cpp:2509
L2_FECollection(const int p, const int dim, const int btype=BasisType::GaussLegendre, const int map_type=FiniteElement::VALUE, const int pyr_type=ScalarPyramid::DefaultType)
Definition fe_coll.cpp:2186
const char * Name() const override
Definition fe_coll.hpp:404
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:2485
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:392
int GetContType() const override
Definition fe_coll.hpp:406
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:2490
FiniteElementCollection * Clone(int p) const override
Instantiate a new collection of the same type with a different order.
Definition fe_coll.hpp:416
Tensor products of 1D Lagrange1DFiniteElement (only degree 2 is functional)
A 1D linear element with nodes on the endpoints.
A 2D linear element on triangle with nodes at the vertices of the triangle.
A 3D linear element on a tetrahedron with nodes at the vertices of the tetrahedron.
Piecewise-linear discontinuous finite elements in 2D. This class is kept only for backward compatibil...
Definition fe_coll.hpp:1168
int GetContType() const override
Definition fe_coll.hpp:1186
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1134
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1148
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1162
const char * Name() const override
Definition fe_coll.hpp:1184
Piecewise-linear discontinuous finite elements in 3D. This class is kept only for backward compatibil...
Definition fe_coll.hpp:1362
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1499
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1465
const char * Name() const override
Definition fe_coll.hpp:1380
int GetContType() const override
Definition fe_coll.hpp:1382
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1481
Piecewise-(bi/tri)linear continuous finite elements.
Definition fe_coll.hpp:911
int GetContType() const override
Definition fe_coll.hpp:934
const char * Name() const override
Definition fe_coll.hpp:932
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:754
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:735
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:772
Piecewise-linear nonconforming finite elements in 3D.
Definition fe_coll.hpp:1045
int GetContType() const override
Definition fe_coll.hpp:1065
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1398
const char * Name() const override
Definition fe_coll.hpp:1063
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1414
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1382
A linear element defined on a square pyramid.
A linear element defined on a triangular prism.
Discontinuous collection defined locally by a given finite element.
Definition fe_coll.hpp:1518
int GetContType() const override
Definition fe_coll.hpp:1540
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType_) const override
Definition fe_coll.hpp:1528
const int * DofOrderForOrientation(Geometry::Type GeomType_, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.hpp:1534
int DofForGeometry(Geometry::Type GeomType_) const override
Definition fe_coll.hpp:1531
const char * Name() const override
Definition fe_coll.hpp:1538
Local_FECollection(const char *fe_name)
Definition fe_coll.cpp:3538
Lowest order Nedelec finite elements in 3D. This class is kept only for backward compatibility,...
Definition fe_coll.hpp:1442
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1604
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1589
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1622
int GetContType() const override
Definition fe_coll.hpp:1462
const char * Name() const override
Definition fe_coll.hpp:1460
Arbitrary order H(curl)-conforming Nedelec finite elements.
Definition fe_coll.hpp:526
int ND_dof[Geometry::NumGeom]
Definition fe_coll.hpp:533
const char * Name() const override
Definition fe_coll.hpp:553
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:3006
int GetConstructorOrder() const override
Return the order parameter used to construct this collection. This differs from GetOrder() depending ...
Definition fe_coll.hpp:565
FiniteElementCollection * Clone(int p) const override
Instantiate a new collection of the same type with a different order.
Definition fe_coll.hpp:562
int GetOpenBasisType() const
Definition fe_coll.hpp:560
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:3024
FiniteElementCollection * GetTraceCollection() const override
Returns a collection of the trace elements.
Definition fe_coll.cpp:3042
virtual ~ND_FECollection()
Definition fe_coll.cpp:3062
int GetClosedBasisType() const
Definition fe_coll.hpp:559
int GetContType() const override
Definition fe_coll.hpp:555
const StatelessDofTransformation * DofTransformationForGeometry(Geometry::Type GeomType) const override
Returns a DoF transformation object compatible with this basis and geometry type.
Definition fe_coll.cpp:3012
FiniteElement * ND_Elements[Geometry::NumGeom]
Definition fe_coll.hpp:532
ND_FECollection(const int p, const int dim, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Definition fe_coll.cpp:2823
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:544
Arbitrary order 3D H(curl)-conforming Nedelec finite elements in 1D.
Definition fe_coll.hpp:587
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:3142
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:602
int ND_dof[Geometry::NumGeom]
Definition fe_coll.hpp:591
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:599
int GetContType() const override
Definition fe_coll.hpp:610
ND_R1D_FECollection(const int p, const int dim, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Definition fe_coll.cpp:3093
const char * Name() const override
Definition fe_coll.hpp:608
FiniteElement * ND_Elements[Geometry::NumGeom]
Definition fe_coll.hpp:590
FiniteElementCollection * GetTraceCollection() const override
Returns a collection of the trace elements.
Definition fe_coll.cpp:3148
Arbitrary order 3D H(curl)-conforming Nedelec finite elements in 2D.
Definition fe_coll.hpp:651
FiniteElementCollection * GetTraceCollection() const override
Returns a collection of the trace elements.
Definition fe_coll.cpp:3325
ND_R2D_FECollection(const int p, const int dim, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Definition fe_coll.cpp:3232
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:664
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:667
FiniteElement * ND_Elements[Geometry::NumGeom]
Definition fe_coll.hpp:654
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:3315
int GetContType() const override
Definition fe_coll.hpp:675
const char * Name() const override
Definition fe_coll.hpp:673
int ND_dof[Geometry::NumGeom]
Definition fe_coll.hpp:655
Arbitrary order 3D H(curl)-trace finite elements in 2D defined on the interface between mesh elements...
Definition fe_coll.hpp:686
ND_R2D_Trace_FECollection(const int p, const int dim, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Definition fe_coll.cpp:3355
Arbitrary order H(curl)-trace finite elements defined on the interface between mesh elements (faces,...
Definition fe_coll.hpp:575
ND_Trace_FECollection(const int p, const int dim, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Definition fe_coll.cpp:3074
FiniteElementCollection * Clone(int p) const override
Instantiate a new collection of the same type with a different order.
Definition fe_coll.hpp:581
An arbitrary order 1D NURBS element on a segment.
Definition fe_nurbs.hpp:72
An arbitrary order 2D NURBS element on a square.
Definition fe_nurbs.hpp:106
An arbitrary order 3D NURBS element on a cube.
Definition fe_nurbs.hpp:153
Arbitrary order non-uniform rational B-splines (NURBS) finite elements.
Definition fe_coll.hpp:749
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:3629
int GetOrder() const
Get the order of the NURBS collection: either a positive number, when using fixed order,...
Definition fe_coll.hpp:783
virtual void Reset() const
Definition fe_coll.hpp:771
virtual void SetOrder(int Order) const
Set the order and the name, based on the given Order: either a positive number for fixed order,...
Definition fe_coll.cpp:3592
const char * Name() const override
Definition fe_coll.hpp:797
virtual void SetDim(const int dim)
Definition fe_coll.hpp:778
int GetContType() const override
Definition fe_coll.hpp:799
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:3614
NURBS2DFiniteElement * QuadrilateralFE
Definition fe_coll.hpp:753
NURBS1DFiniteElement * SegmentFE
Definition fe_coll.hpp:752
NURBSFECollection(int Order=VariableOrder)
The parameter Order must be either a positive number, for fixed order, or VariableOrder (default).
Definition fe_coll.cpp:3580
FiniteElementCollection * GetTraceCollection() const override
Returns a collection of the trace elements.
Definition fe_coll.cpp:3642
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:3635
NURBS3DFiniteElement * ParallelepipedFE
Definition fe_coll.hpp:754
PointFiniteElement * PointFE
Definition fe_coll.hpp:751
void Reset() const
Resets the patch and element data stored in the element.
Definition fe_nurbs.hpp:43
Arbitrary order H(curl) NURBS finite elements.
Definition fe_coll.hpp:860
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:3820
void SetOrder(int Order) const override
Set the order and the name, based on the given Order: either a positive number for fixed order,...
Definition fe_coll.cpp:3801
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:3787
const char * Name() const override
Definition fe_coll.hpp:900
NURBS_HCurlFECollection(int Order=VariableOrder, const int vdim=-1)
The parameter Order must be either a positive number, for fixed order, or VariableOrder (default).
Definition fe_coll.cpp:3741
void SetDim(const int dim) override
Definition fe_coll.cpp:3755
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:3814
void Reset() const override
Definition fe_coll.hpp:878
FiniteElementCollection * GetTraceCollection() const override
Returns a collection of the trace elements.
Definition fe_coll.cpp:3828
int GetContType() const override
Definition fe_coll.hpp:902
Arbitrary order H(div) NURBS finite elements.
Definition fe_coll.hpp:808
void SetDim(const int dim) override
Definition fe_coll.cpp:3664
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:3721
void SetOrder(int Order) const override
Set the order and the name, based on the given Order: either a positive number for fixed order,...
Definition fe_coll.cpp:3708
FiniteElementCollection * GetTraceCollection() const override
Returns a collection of the trace elements.
Definition fe_coll.cpp:3735
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:3727
int GetContType() const override
Definition fe_coll.hpp:851
const char * Name() const override
Definition fe_coll.hpp:849
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:3694
void Reset() const override
Definition fe_coll.hpp:827
NURBS_HDivFECollection(int Order=VariableOrder, const int vdim=-1)
The parameter Order must be either a positive number, for fixed order, or VariableOrder (default).
Definition fe_coll.cpp:3649
A 3D 1st order Nedelec element on a cube.
A 3D 1st order Nedelec element on a pyramid.
A 3D 1st order Nedelec element on a tetrahedron.
A 3D 1st order Nedelec element on a wedge.
A 3D constant element on a cube.
A 3D constant element on a pyramid.
A 2D constant element on a square.
A 1D constant element on a segment.
A 3D constant element on a tetrahedron.
A 2D constant element on a triangle.
A 3D constant element on a wedge.
Linear (P1) finite elements on quadrilaterals.
Definition fe_coll.hpp:1215
const char * Name() const override
Definition fe_coll.hpp:1229
int GetContType() const override
Definition fe_coll.hpp:1231
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1209
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1232
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1219
A 2D linear element on a square with 3 nodes at the vertices of the lower left triangle.
A 1D linear element with nodes at 1/3 and 2/3 (trace of RT1)
A 3D Crouzeix-Raviart element on the tetrahedron.
A 1D quadratic element with nodes at the Gaussian points (trace of RT2)
A 0D point finite element.
A 1D quadratic finite element with uniformly spaced nodes.
A 2D quadratic element on triangle with nodes at the vertices and midpoints of the triangle.
A 1D quadratic positive element utilizing the 2nd order Bernstein basis.
Definition fe_pos.hpp:109
A 3D quadratic element on a tetrahedron with uniformly spaced nodes.
Piecewise-quadratic discontinuous finite elements in 2D. This class is kept only for backward compati...
Definition fe_coll.hpp:1238
const char * Name() const override
Definition fe_coll.hpp:1254
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1254
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1240
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1269
Piecewise-quadratic discontinuous finite elements in 3D. This class is kept only for backward compati...
Definition fe_coll.hpp:1389
const char * Name() const override
Definition fe_coll.hpp:1406
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1507
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1521
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1538
Piecewise-(bi)quadratic continuous finite elements.
Definition fe_coll.hpp:939
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:798
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:815
int GetContType() const override
Definition fe_coll.hpp:963
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:780
const char * Name() const override
Definition fe_coll.hpp:961
Version of QuadraticDiscont2DFECollection with positive basis functions.
Definition fe_coll.hpp:1261
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1277
const char * Name() const override
Definition fe_coll.hpp:1277
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1290
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.hpp:1273
Version of QuadraticFECollection with positive basis functions.
Definition fe_coll.hpp:968
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:825
int GetContType() const override
Definition fe_coll.hpp:986
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:852
const char * Name() const override
Definition fe_coll.hpp:984
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:839
A 3D 0th order Raviert-Thomas element on a cube.
A 3D 0th order Raviert-Thomas element on a pyramid.
A 2D 1st order Raviart-Thomas vector element on a square.
A 3D 0th order Raviert-Thomas element on a tetrahedron.
A 2D 1st order Raviart-Thomas vector element on a triangle.
A 3D 0th order Raviert-Thomas element on a wedge.
First order Raviart-Thomas finite elements in 2D. This class is kept only for backward compatibility,...
Definition fe_coll.hpp:1071
const char * Name() const override
Definition fe_coll.hpp:1087
int GetContType() const override
Definition fe_coll.hpp:1089
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:971
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:999
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:985
First order Raviart-Thomas finite elements in 3D. This class is kept only for backward compatibility,...
Definition fe_coll.hpp:1468
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1672
const char * Name() const override
Definition fe_coll.hpp:1487
int GetContType() const override
Definition fe_coll.hpp:1489
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1637
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1654
A 3D 1st order Raviert-Thomas element on a cube.
A 2D 2nd order Raviart-Thomas vector element on a square.
A 2D 2nd order Raviart-Thomas vector element on a triangle.
Second order Raviart-Thomas finite elements in 2D. This class is kept only for backward compatibility...
Definition fe_coll.hpp:1095
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1014
const char * Name() const override
Definition fe_coll.hpp:1111
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1042
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1028
int GetContType() const override
Definition fe_coll.hpp:1113
Second order Raviart-Thomas finite elements in 3D. This class is kept only for backward compatibility...
Definition fe_coll.hpp:1495
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1704
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1690
int GetContType() const override
Definition fe_coll.hpp:1513
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1719
const char * Name() const override
Definition fe_coll.hpp:1511
A 2D 3rd order Raviart-Thomas vector element on a square.
A 2D 3rd order Raviart-Thomas vector element on a triangle.
Third order Raviart-Thomas finite elements in 2D. This class is kept only for backward compatibility,...
Definition fe_coll.hpp:1119
const char * Name() const override
Definition fe_coll.hpp:1135
int GetContType() const override
Definition fe_coll.hpp:1137
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1070
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1084
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1056
Arbitrary order H(div)-conforming Raviart-Thomas finite elements.
Definition fe_coll.hpp:430
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:464
int RT_dof[Geometry::NumGeom]
Definition fe_coll.hpp:437
FiniteElement * RT_Elements[Geometry::NumGeom]
Definition fe_coll.hpp:436
void InitFaces(const int p, const int dim, const int map_type, const bool signs)
Definition fe_coll.cpp:2611
int GetClosedBasisType() const
Definition fe_coll.hpp:476
virtual ~RT_FECollection()
Definition fe_coll.cpp:2771
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:2736
const char * Name() const override
Definition fe_coll.hpp:470
FiniteElementCollection * Clone(int p) const override
Instantiate a new collection of the same type with a different order.
Definition fe_coll.hpp:479
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:2731
int GetContType() const override
Definition fe_coll.hpp:472
int GetConstructorOrder() const override
Return the order parameter used to construct this collection. This differs from GetOrder() depending ...
Definition fe_coll.hpp:482
FiniteElementCollection * GetTraceCollection() const override
Returns a collection of the trace elements.
Definition fe_coll.cpp:2754
int GetOpenBasisType() const
Definition fe_coll.hpp:477
RT_FECollection(const int p, const int dim, const int map_type, const bool signs, const int ob_type=BasisType::GaussLegendre)
Definition fe_coll.cpp:2595
Arbitrary order 3D H(div)-conforming Raviart-Thomas finite elements in 1D.
Definition fe_coll.hpp:619
FiniteElementCollection * GetTraceCollection() const override
Returns a collection of the trace elements.
Definition fe_coll.cpp:3217
int GetContType() const override
Definition fe_coll.hpp:642
FiniteElement * RT_Elements[Geometry::NumGeom]
Definition fe_coll.hpp:622
RT_R1D_FECollection(const int p, const int dim, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Definition fe_coll.cpp:3162
int RT_dof[Geometry::NumGeom]
Definition fe_coll.hpp:623
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:3211
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:631
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:634
const char * Name() const override
Definition fe_coll.hpp:640
Arbitrary order 3D H(div)-conforming Raviart-Thomas finite elements in 2D.
Definition fe_coll.hpp:695
void InitFaces(const int p, const int dim, const int map_type, const bool signs)
Definition fe_coll.cpp:3443
RT_R2D_FECollection(const int p, const int dim, const int map_type, const bool signs, const int ob_type=BasisType::GaussLegendre)
Definition fe_coll.cpp:3429
FiniteElement * RT_Elements[Geometry::NumGeom]
Definition fe_coll.hpp:699
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:718
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.hpp:721
int RT_dof[Geometry::NumGeom]
Definition fe_coll.hpp:700
const char * Name() const override
Definition fe_coll.hpp:727
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:3482
FiniteElementCollection * GetTraceCollection() const override
Returns a collection of the trace elements.
Definition fe_coll.cpp:3492
int GetContType() const override
Definition fe_coll.hpp:729
Arbitrary order 3D "H^{-1/2}-conforming" face finite elements defined on the interface between mesh e...
Definition fe_coll.hpp:740
RT_R2D_Trace_FECollection(const int p, const int dim, const int map_type=FiniteElement::INTEGRAL, const int ob_type=BasisType::GaussLegendre)
Definition fe_coll.cpp:3518
Arbitrary order "H^{-1/2}-conforming" face finite elements defined on the interface between mesh elem...
Definition fe_coll.hpp:492
RT_Trace_FECollection(const int p, const int dim, const int map_type=FiniteElement::INTEGRAL, const int ob_type=BasisType::GaussLegendre)
Definition fe_coll.cpp:2783
FiniteElementCollection * Clone(int p) const override
Instantiate a new collection of the same type with a different order.
Definition fe_coll.hpp:498
A 2D refined bi-linear FE on a square.
A 1D refined linear element.
A 2D refined linear element on a triangle.
A 2D refined linear element on a tetrahedron.
Finite element collection on a macro-element.
Definition fe_coll.hpp:1413
const FiniteElement * FiniteElementForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1545
int DofForGeometry(Geometry::Type GeomType) const override
Definition fe_coll.cpp:1563
int GetContType() const override
Definition fe_coll.hpp:1435
const int * DofOrderForOrientation(Geometry::Type GeomType, int Or) const override
Returns an array, say p, that maps a local permuted index i to a local base index: base_i = p[i].
Definition fe_coll.cpp:1579
const char * Name() const override
Definition fe_coll.hpp:1433
A 3D refined tri-linear element on a cube.
Class for finite elements with basis functions that return scalar values.
Definition fe_base.hpp:739
A 3D tri-linear element on a cube with nodes at the vertices of the cube.
int dim
Definition ex24.cpp:53
Linear1DFiniteElement SegmentFE
Definition segment.cpp:52
MFEM_EXPORT class LinearWedgeFiniteElement WedgeFE
Definition fe.cpp:40
L2_FECollection DG_FECollection
Declare an alternative name for L2_FECollection = DG_FECollection.
Definition fe_coll.hpp:426
BiLinear2DFiniteElement QuadrilateralFE
std::function< real_t(const Vector &)> f(real_t mass_coeff)
Definition lor_mms.hpp:30
real_t p(const Vector &x, real_t t)
static int DefaultType