MFEM  v4.5.2
Finite element discretization library
fe_pos.hpp
Go to the documentation of this file.
1 // Copyright (c) 2010-2023, Lawrence Livermore National Security, LLC. Produced
2 // at the Lawrence Livermore National Laboratory. All Rights reserved. See files
3 // LICENSE and NOTICE for details. LLNL-CODE-806117.
4 //
5 // This file is part of the MFEM library. For more information and source code
6 // availability visit https://mfem.org.
7 //
8 // MFEM is free software; you can redistribute it and/or modify it under the
9 // terms of the BSD-3 license. We welcome feedback and contributions, see file
10 // CONTRIBUTING.md for details.
11 
12 #ifndef MFEM_FE_POS
13 #define MFEM_FE_POS
14 
15 #include "fe_base.hpp"
16 
17 namespace mfem
18 {
19 
20 /** @brief Class for finite elements utilizing the
21  always positive Bernstein basis. */
23 {
24 public:
25  /** @brief Construct PositiveFiniteElement with given
26  @param D Reference space dimension
27  @param G Geometry type (of type Geometry::Type)
28  @param Do Number of degrees of freedom in the FiniteElement
29  @param O Order/degree of the FiniteElement
30  @param F FunctionSpace type of the FiniteElement
31  */
32  PositiveFiniteElement(int D, Geometry::Type G, int Do, int O,
33  int F = FunctionSpace::Pk) :
34  ScalarFiniteElement(D, G, Do, O, F)
35  { }
36 
38  DenseMatrix &I) const
39  { ScalarLocalInterpolation(Trans, I, *this); }
40 
42  DenseMatrix &R) const
43  { ScalarLocalL2Restriction(Trans, R, *this); }
44 
45  virtual void GetTransferMatrix(const FiniteElement &fe,
47  DenseMatrix &I) const
48  { CheckScalarFE(fe).ScalarLocalInterpolation(Trans, I, *this); }
49 
51 
52  // Low-order monotone "projection" (actually it is not a projection): the
53  // dofs are set to be the Coefficient values at the nodes.
54  virtual void Project(Coefficient &coeff,
55  ElementTransformation &Trans, Vector &dofs) const;
56 
57  virtual void Project (VectorCoefficient &vc,
58  ElementTransformation &Trans, Vector &dofs) const;
59 
60  virtual void Project(const FiniteElement &fe, ElementTransformation &Trans,
61  DenseMatrix &I) const;
62 };
63 
64 
66  public TensorBasisElement
67 {
68 public:
69  PositiveTensorFiniteElement(const int dims, const int p,
70  const DofMapType dmtype);
71 
73  DofToQuad::Mode mode) const
74  {
75  return (mode == DofToQuad::FULL) ?
76  FiniteElement::GetDofToQuad(ir, mode) :
77  GetTensorDofToQuad(*this, ir, mode, basis1d, true, dof2quad_array);
78  }
79 };
80 
81 
82 /// A 2D positive bi-quadratic element on a square utilizing the 2nd order
83 /// Bernstein basis
85 {
86 public:
87  /// Construct the BiQuadPos2DFiniteElement
89  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
90  virtual void CalcDShape(const IntegrationPoint &ip,
91  DenseMatrix &dshape) const;
93  DenseMatrix &I) const;
95  virtual void Project(Coefficient &coeff, ElementTransformation &Trans,
96  Vector &dofs) const;
98  Vector &dofs) const;
99  virtual void ProjectDelta(int vertex, Vector &dofs) const
100  { dofs = 0.; dofs(vertex) = 1.; }
101 };
102 
103 
104 /// A 1D quadratic positive element utilizing the 2nd order Bernstein basis
106 {
107 public:
108  /// Construct the QuadPos1DFiniteElement
110  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
111  virtual void CalcDShape(const IntegrationPoint &ip,
112  DenseMatrix &dshape) const;
113 };
114 
115 
116 /// Arbitrary order H1 elements in 1D utilizing the Bernstein basis
118 {
119 private:
120 #ifndef MFEM_THREAD_SAFE
121  // This is to share scratch space between invocations, which helps speed
122  // things up, but with OpenMP, we need one copy per thread. Right now, we
123  // solve this by allocating this space within each function call every time
124  // we call it. Alternatively, we should do some sort thread private thing.
125  // Brunner, Jan 2014
126  mutable Vector shape_x, dshape_x;
127 #endif
128 
129 public:
130  /// Construct the H1Pos_SegmentElement of order @a p
131  H1Pos_SegmentElement(const int p);
132  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
133  virtual void CalcDShape(const IntegrationPoint &ip,
134  DenseMatrix &dshape) const;
135  virtual void ProjectDelta(int vertex, Vector &dofs) const;
136 };
137 
138 
139 /// Arbitrary order H1 elements in 2D utilizing the Bernstein basis on a square
141 {
142 private:
143 #ifndef MFEM_THREAD_SAFE
144  // See comment in H1Pos_SegmentElement
145  mutable Vector shape_x, shape_y, dshape_x, dshape_y;
146 #endif
147 
148 public:
149  /// Construct the H1Pos_QuadrilateralElement of order @a p
150  H1Pos_QuadrilateralElement(const int p);
151  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
152  virtual void CalcDShape(const IntegrationPoint &ip,
153  DenseMatrix &dshape) const;
154  virtual void ProjectDelta(int vertex, Vector &dofs) const;
155 };
156 
157 
158 /// Arbitrary order H1 elements in 3D utilizing the Bernstein basis on a cube
160 {
161 private:
162 #ifndef MFEM_THREAD_SAFE
163  // See comment in H1Pos_SegmentElement.
164  mutable Vector shape_x, shape_y, shape_z, dshape_x, dshape_y, dshape_z;
165 #endif
166 
167 public:
168  /// Construct the H1Pos_HexahedronElement of order @a p
169  H1Pos_HexahedronElement(const int p);
170  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
171  virtual void CalcDShape(const IntegrationPoint &ip,
172  DenseMatrix &dshape) const;
173  virtual void ProjectDelta(int vertex, Vector &dofs) const;
174 };
175 
176 
177 /// Arbitrary order H1 elements in 2D utilizing the Bernstein basis on a triangle
179 {
180 protected:
181 #ifndef MFEM_THREAD_SAFE
184 #endif
186 
187 public:
188  /// Construct the H1Pos_TriangleElement of order @a p
189  H1Pos_TriangleElement(const int p);
190 
191  // The size of shape is (p+1)(p+2)/2 (dof).
192  static void CalcShape(const int p, const double x, const double y,
193  double *shape);
194 
195  // The size of dshape_1d is p+1; the size of dshape is (dof x dim).
196  static void CalcDShape(const int p, const double x, const double y,
197  double *dshape_1d, double *dshape);
198 
199  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
200  virtual void CalcDShape(const IntegrationPoint &ip,
201  DenseMatrix &dshape) const;
202 };
203 
204 
205 /// Arbitrary order H1 elements in 3D utilizing the Bernstein basis on a
206 /// tetrahedron
208 {
209 protected:
210 #ifndef MFEM_THREAD_SAFE
213 #endif
215 
216 public:
217  /// Construct the H1Pos_TetrahedronElement of order @a p
218  H1Pos_TetrahedronElement(const int p);
219 
220  // The size of shape is (p+1)(p+2)(p+3)/6 (dof).
221  static void CalcShape(const int p, const double x, const double y,
222  const double z, double *shape);
223 
224  // The size of dshape_1d is p+1; the size of dshape is (dof x dim).
225  static void CalcDShape(const int p, const double x, const double y,
226  const double z, double *dshape_1d, double *dshape);
227 
228  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
229  virtual void CalcDShape(const IntegrationPoint &ip,
230  DenseMatrix &dshape) const;
231 };
232 
233 
234 /// Arbitrary order H1 elements in 3D utilizing the Bernstein basis on a wedge
236 {
237 protected:
238 #ifndef MFEM_THREAD_SAFE
241 #endif
243 
246 
247 public:
248  /// Construct the H1Pos_WedgeElement of order @a p
249  H1Pos_WedgeElement(const int p);
250 
251  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
252  virtual void CalcDShape(const IntegrationPoint &ip,
253  DenseMatrix &dshape) const;
254 };
255 
256 
257 /// Arbitrary order L2 elements in 1D utilizing the Bernstein basis on a segment
259 {
260 private:
261 #ifndef MFEM_THREAD_SAFE
262  mutable Vector shape_x, dshape_x;
263 #endif
264 
265 public:
266  /// Construct the L2Pos_SegmentElement of order @a p
267  L2Pos_SegmentElement(const int p);
268  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
269  virtual void CalcDShape(const IntegrationPoint &ip,
270  DenseMatrix &dshape) const;
271  virtual void ProjectDelta(int vertex, Vector &dofs) const;
272 };
273 
274 
275 /// Arbitrary order L2 elements in 2D utilizing the Bernstein basis on a square
277 {
278 private:
279 #ifndef MFEM_THREAD_SAFE
280  mutable Vector shape_x, shape_y, dshape_x, dshape_y;
281 #endif
282 
283 public:
284  /// Construct the L2Pos_QuadrilateralElement of order @a p
285  L2Pos_QuadrilateralElement(const int p);
286  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
287  virtual void CalcDShape(const IntegrationPoint &ip,
288  DenseMatrix &dshape) const;
289  virtual void ProjectDelta(int vertex, Vector &dofs) const;
290 };
291 
292 
293 /// Arbitrary order L2 elements in 3D utilizing the Bernstein basis on a cube
295 {
296 private:
297 #ifndef MFEM_THREAD_SAFE
298  mutable Vector shape_x, shape_y, shape_z, dshape_x, dshape_y, dshape_z;
299 #endif
300 
301 public:
302  /// Construct the L2Pos_HexahedronElement of order @a p
303  L2Pos_HexahedronElement(const int p);
304  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
305  virtual void CalcDShape(const IntegrationPoint &ip,
306  DenseMatrix &dshape) const;
307  virtual void ProjectDelta(int vertex, Vector &dofs) const;
308 };
309 
310 
311 /// Arbitrary order L2 elements in 2D utilizing the Bernstein basis on a triangle
313 {
314 private:
315 #ifndef MFEM_THREAD_SAFE
316  mutable Vector dshape_1d;
317 #endif
318 
319 public:
320  /// Construct the L2Pos_TriangleElement of order @a p
321  L2Pos_TriangleElement(const int p);
322  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
323  virtual void CalcDShape(const IntegrationPoint &ip,
324  DenseMatrix &dshape) const;
325  virtual void ProjectDelta(int vertex, Vector &dofs) const;
326 };
327 
328 
329 /// Arbitrary order L2 elements in 3D utilizing the Bernstein basis on a
330 /// tetrahedron
332 {
333 private:
334 #ifndef MFEM_THREAD_SAFE
335  mutable Vector dshape_1d;
336 #endif
337 
338 public:
339  /// Construct the L2Pos_TetrahedronElement of order @a p
340  L2Pos_TetrahedronElement(const int p);
341  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
342  virtual void CalcDShape(const IntegrationPoint &ip,
343  DenseMatrix &dshape) const;
344  virtual void ProjectDelta(int vertex, Vector &dofs) const;
345 };
346 
347 
348 /// Arbitrary order L2 elements in 3D utilizing the Bernstein basis on a wedge
350 {
351 protected:
352 #ifndef MFEM_THREAD_SAFE
355 #endif
357 
360 
361 public:
362  /// Construct the L2Pos_WedgeElement of order @a p
363  L2Pos_WedgeElement(const int p);
364 
365  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const;
366  virtual void CalcDShape(const IntegrationPoint &ip,
367  DenseMatrix &dshape) const;
368 };
369 
370 } // namespace mfem
371 
372 #endif
Abstract class for all finite elements.
Definition: fe_base.hpp:232
Class for an integration rule - an Array of IntegrationPoint.
Definition: intrules.hpp:90
L2Pos_WedgeElement(const int p)
Construct the L2Pos_WedgeElement of order p.
Definition: fe_pos.cpp:1357
Arbitrary order L2 elements in 2D utilizing the Bernstein basis on a triangle.
Definition: fe_pos.hpp:312
virtual void ProjectDelta(int vertex, Vector &dofs) const
Project a delta function centered on the given vertex in the local finite dimensional space represent...
Definition: fe_pos.cpp:1291
L2Pos_TriangleElement(const int p)
Construct the L2Pos_TriangleElement of order p.
Definition: fe_pos.cpp:1252
virtual void GetLocalInterpolation(ElementTransformation &Trans, DenseMatrix &I) const
Return the local interpolation matrix I (Dof x Dof) where the fine element is the image of the base g...
Definition: fe_pos.hpp:37
H1Pos_SegmentElement(const int p)
Construct the H1Pos_SegmentElement of order p.
Definition: fe_pos.cpp:292
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition: fe_pos.cpp:1013
Base class for vector Coefficients that optionally depend on time and space.
PositiveTensorFiniteElement(const int dims, const int p, const DofMapType dmtype)
Definition: fe_pos.cpp:80
Class for finite elements utilizing the always positive Bernstein basis.
Definition: fe_pos.hpp:22
L2Pos_TetrahedronElement(const int p)
Construct the L2Pos_TetrahedronElement of order p.
Definition: fe_pos.cpp:1303
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition: fe_pos.cpp:330
virtual void ProjectDelta(int vertex, Vector &dofs) const
Project a delta function centered on the given vertex in the local finite dimensional space represent...
Definition: fe_pos.hpp:99
H1Pos_SegmentElement SegmentFE
Definition: fe_pos.hpp:245
Arbitrary order L2 elements in 1D utilizing the Bernstein basis on a segment.
Definition: fe_pos.hpp:258
H1Pos_TetrahedronElement(const int p)
Construct the H1Pos_TetrahedronElement of order p.
Definition: fe_pos.cpp:644
BiQuadPos2DFiniteElement()
Construct the BiQuadPos2DFiniteElement.
Definition: fe_pos.cpp:88
Data type dense matrix using column-major storage.
Definition: densemat.hpp:23
static const DofToQuad & GetTensorDofToQuad(const FiniteElement &fe, const IntegrationRule &ir, DofToQuad::Mode mode, const Poly_1D::Basis &basis, bool closed, Array< DofToQuad *> &dof2quad_array)
Definition: fe_base.cpp:2447
virtual void ProjectDelta(int vertex, Vector &dofs) const
Project a delta function centered on the given vertex in the local finite dimensional space represent...
Definition: fe_pos.cpp:1076
H1Pos_HexahedronElement(const int p)
Construct the H1Pos_HexahedronElement of order p.
Definition: fe_pos.cpp:425
static void CalcShape(const int p, const double x, const double y, const double z, double *shape)
Definition: fe_pos.cpp:746
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition: fe_pos.cpp:1126
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition: fe_pos.cpp:1280
PositiveFiniteElement(int D, Geometry::Type G, int Do, int O, int F=FunctionSpace::Pk)
Construct PositiveFiniteElement with given.
Definition: fe_pos.hpp:32
virtual void ProjectDelta(int vertex, Vector &dofs) const
Project a delta function centered on the given vertex in the local finite dimensional space represent...
Definition: fe_pos.cpp:1233
L2Pos_HexahedronElement(const int p)
Construct the L2Pos_HexahedronElement of order p.
Definition: fe_pos.cpp:1161
static void CalcDShape(const int p, const double x, const double y, const double z, double *dshape_1d, double *dshape)
Definition: fe_pos.cpp:779
virtual void ProjectDelta(int vertex, Vector &dofs) const
Project a delta function centered on the given vertex in the local finite dimensional space represent...
Definition: fe_pos.cpp:350
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition: fe_pos.cpp:1065
H1Pos_TriangleElement(const int p)
Construct the H1Pos_TriangleElement of order p.
Definition: fe_pos.cpp:499
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition: fe_pos.cpp:1209
virtual void Project(Coefficient &coeff, ElementTransformation &Trans, Vector &dofs) const
Given a coefficient and a transformation, compute its projection (approximation) in the local finite ...
Definition: fe_base.cpp:125
Polynomials of order k.
Definition: fe_base.hpp:220
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition: fe_pos.cpp:281
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition: fe_pos.cpp:994
static void CalcShape(const int p, const double x, const double y, double *shape)
Definition: fe_pos.cpp:554
Array< int > s_dof
Definition: fe_pos.hpp:356
virtual const DofToQuad & GetDofToQuad(const IntegrationRule &ir, DofToQuad::Mode mode) const
Return a DofToQuad structure corresponding to the given IntegrationRule using the given DofToQuad::Mo...
Definition: fe_base.cpp:364
Class for finite elements with basis functions that return scalar values.
Definition: fe_base.hpp:627
static const ScalarFiniteElement & CheckScalarFE(const FiniteElement &fe)
Definition: fe_base.hpp:630
Arbitrary order L2 elements in 2D utilizing the Bernstein basis on a square.
Definition: fe_pos.hpp:276
Poly_1D::Basis & basis1d
Definition: fe_base.hpp:1166
H1Pos_WedgeElement(const int p)
Construct the H1Pos_WedgeElement of order p.
Definition: fe_pos.cpp:896
Array< int > t_dof
Definition: fe_pos.hpp:356
L2Pos_QuadrilateralElement(const int p)
Construct the L2Pos_QuadrilateralElement of order p.
Definition: fe_pos.cpp:1083
static void CalcDShape(const int p, const double x, const double y, double *dshape_1d, double *dshape)
Definition: fe_pos.cpp:580
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition: fe_pos.cpp:310
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition: fe_pos.cpp:135
Arbitrary order H1 elements in 3D utilizing the Bernstein basis on a wedge.
Definition: fe_pos.hpp:235
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition: fe_pos.cpp:1333
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition: fe_pos.cpp:447
Array< int > t_dof
Definition: fe_pos.hpp:242
virtual void ProjectDelta(int vertex, Vector &dofs) const
Project a delta function centered on the given vertex in the local finite dimensional space represent...
Definition: fe_pos.cpp:1344
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition: fe_pos.cpp:1107
H1Pos_TriangleElement TriangleFE
Definition: fe_pos.hpp:244
virtual void ProjectDelta(int vertex, Vector &dofs) const
Project a delta function centered on the given vertex in the local finite dimensional space represent...
Definition: fe_pos.cpp:492
Arbitrary order H1 elements in 3D utilizing the Bernstein basis on a cube.
Definition: fe_pos.hpp:159
Base class Coefficients that optionally depend on space and time. These are used by the BilinearFormI...
Definition: coefficient.hpp:41
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition: fe_pos.cpp:377
virtual void GetLocalRestriction(ElementTransformation &Trans, DenseMatrix &R) const
Return a local restriction matrix R (Dof x Dof) mapping fine dofs to coarse dofs. ...
Definition: fe_pos.hpp:41
DenseMatrix t_dshape
Definition: fe_pos.hpp:240
Arbitrary order L2 elements in 3D utilizing the Bernstein basis on a wedge.
Definition: fe_pos.hpp:349
DenseMatrix t_dshape
Definition: fe_pos.hpp:354
void ScalarLocalInterpolation(ElementTransformation &Trans, DenseMatrix &I, const ScalarFiniteElement &fine_fe) const
Get matrix I "Interpolation" defined through local L2-projection in the space defined by the fine_fe...
Definition: fe_base.cpp:536
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition: fe_pos.cpp:1400
DenseMatrix s_dshape
Definition: fe_pos.hpp:240
DenseMatrix s_dshape
Definition: fe_pos.hpp:354
Structure representing the matrices/tensors needed to evaluate (in reference space) the values...
Definition: fe_base.hpp:135
L2Pos_TriangleElement TriangleFE
Definition: fe_pos.hpp:358
virtual void GetLocalInterpolation(ElementTransformation &Trans, DenseMatrix &I) const
Return the local interpolation matrix I (Dof x Dof) where the fine element is the image of the base g...
Definition: fe_pos.cpp:184
H1Pos_QuadrilateralElement(const int p)
Construct the H1Pos_QuadrilateralElement of order p.
Definition: fe_pos.cpp:357
virtual void Project(Coefficient &coeff, ElementTransformation &Trans, Vector &dofs) const
Given a coefficient and a transformation, compute its projection (approximation) in the local finite ...
Definition: fe_pos.cpp:24
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition: fe_pos.cpp:1188
Class for integration point with weight.
Definition: intrules.hpp:25
Mode
Type of data stored in the arrays B, Bt, G, and Gt.
Definition: fe_base.hpp:148
Full multidimensional representation which does not use tensor product structure. The ordering of the...
Definition: fe_base.hpp:153
L2Pos_SegmentElement SegmentFE
Definition: fe_pos.hpp:359
virtual void Project(Coefficient &coeff, ElementTransformation &Trans, Vector &dofs) const
Given a coefficient and a transformation, compute its projection (approximation) in the local finite ...
Definition: fe_pos.cpp:213
Array< DofToQuad * > dof2quad_array
Container for all DofToQuad objects created by the FiniteElement.
Definition: fe_base.hpp:252
Array< int > s_dof
Definition: fe_pos.hpp:242
A 1D quadratic positive element utilizing the 2nd order Bernstein basis.
Definition: fe_pos.hpp:105
virtual void ProjectDelta(int vertex, Vector &dofs) const
Project a delta function centered on the given vertex in the local finite dimensional space represent...
Definition: fe_pos.cpp:418
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition: fe_pos.cpp:111
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition: fe_pos.cpp:397
Arbitrary order H1 elements in 1D utilizing the Bernstein basis.
Definition: fe_pos.hpp:117
Arbitrary order H1 elements in 2D utilizing the Bernstein basis on a square.
Definition: fe_pos.hpp:140
Arbitrary order L2 elements in 3D utilizing the Bernstein basis on a cube.
Definition: fe_pos.hpp:294
L2Pos_SegmentElement(const int p)
Construct the L2Pos_SegmentElement of order p.
Definition: fe_pos.cpp:1038
Vector data type.
Definition: vector.hpp:60
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition: fe_pos.cpp:271
virtual void GetTransferMatrix(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &I) const
Return interpolation matrix, I, which maps dofs from a coarse element, fe, to the fine dofs on this f...
Definition: fe_pos.hpp:45
virtual void ProjectDelta(int vertex, Vector &dofs) const
Project a delta function centered on the given vertex in the local finite dimensional space represent...
Definition: fe_pos.cpp:1146
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition: fe_pos.cpp:1274
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition: fe_pos.cpp:468
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition: fe_pos.cpp:1059
QuadPos1DFiniteElement()
Construct the QuadPos1DFiniteElement.
Definition: fe_pos.cpp:263
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition: fe_pos.cpp:1419
const DofToQuad & GetDofToQuad(const IntegrationRule &ir, DofToQuad::Mode mode) const
Return a DofToQuad structure corresponding to the given IntegrationRule using the given DofToQuad::Mo...
Definition: fe_pos.hpp:72
void ScalarLocalL2Restriction(ElementTransformation &Trans, DenseMatrix &R, const ScalarFiniteElement &coarse_fe) const
Get restriction matrix R defined through local L2-projection in the space defined by the coarse_fe...
Definition: fe_base.cpp:577
Arbitrary order H1 elements in 2D utilizing the Bernstein basis on a triangle.
Definition: fe_pos.hpp:178
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition: fe_pos.cpp:1326