MFEM  v4.6.0
Finite element discretization library
fe_nd.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_ND
13 #define MFEM_FE_ND
14 
15 #include "fe_base.hpp"
16 #include "fe_h1.hpp"
17 
18 namespace mfem
19 {
20 
21 /// Arbitrary order Nedelec elements in 3D on a cube
23 {
24  static const double tk[18];
25 #ifndef MFEM_THREAD_SAFE
26  mutable Vector shape_cx, shape_ox, shape_cy, shape_oy, shape_cz, shape_oz;
27  mutable Vector dshape_cx, dshape_cy, dshape_cz;
28 #endif
29  Array<int> dof2tk;
30  const double *cp;
31 
32 public:
33  /** @brief Construct the ND_HexahedronElement of order @a p and closed and
34  open BasisType @a cb_type and @a ob_type */
35  ND_HexahedronElement(const int p,
36  const int cb_type = BasisType::GaussLobatto,
37  const int ob_type = BasisType::GaussLegendre);
38 
39  virtual void CalcVShape(const IntegrationPoint &ip,
40  DenseMatrix &shape) const;
41 
42  virtual void CalcVShape(ElementTransformation &Trans,
43  DenseMatrix &shape) const
44  { CalcVShape_ND(Trans, shape); }
45 
46  virtual void CalcCurlShape(const IntegrationPoint &ip,
47  DenseMatrix &curl_shape) const;
48 
50  DenseMatrix &I) const
51  { LocalInterpolation_ND(*this, tk, dof2tk, Trans, I); }
52 
54  DenseMatrix &R) const
55  { LocalRestriction_ND(tk, dof2tk, Trans, R); }
56 
57  virtual void GetTransferMatrix(const FiniteElement &fe,
58  ElementTransformation &Trans,
59  DenseMatrix &I) const
60  { LocalInterpolation_ND(CheckVectorFE(fe), tk, dof2tk, Trans, I); }
61 
63 
64  virtual void Project(VectorCoefficient &vc,
65  ElementTransformation &Trans, Vector &dofs) const
66  {
67  if (obasis1d.IsIntegratedType()) { ProjectIntegrated(vc, Trans, dofs); }
68  else { Project_ND(tk, dof2tk, vc, Trans, dofs); }
69  }
70 
71  virtual void ProjectFromNodes(Vector &vc, ElementTransformation &Trans,
72  Vector &dofs) const
73  { Project_ND(tk, dof2tk, vc, Trans, dofs); }
74 
76  MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
77  { ProjectMatrixCoefficient_ND(tk, dof2tk, mc, T, dofs); }
78 
79  virtual void Project(const FiniteElement &fe,
80  ElementTransformation &Trans,
81  DenseMatrix &I) const
82  { Project_ND(tk, dof2tk, fe, Trans, I); }
83 
84  virtual void ProjectGrad(const FiniteElement &fe,
85  ElementTransformation &Trans,
86  DenseMatrix &grad) const
87  { ProjectGrad_ND(tk, dof2tk, fe, Trans, grad); }
88 
89  virtual void ProjectCurl(const FiniteElement &fe,
90  ElementTransformation &Trans,
91  DenseMatrix &curl) const
92  { ProjectCurl_ND(tk, dof2tk, fe, Trans, curl); }
93 
94  virtual void GetFaceMap(const int face_id, Array<int> &face_map) const;
95 
96 protected:
98  ElementTransformation &Trans,
99  Vector &dofs) const;
100 };
101 
102 
103 /// Arbitrary order Nedelec elements in 2D on a square
105 {
106  static const double tk[8];
107 
108 #ifndef MFEM_THREAD_SAFE
109  mutable Vector shape_cx, shape_ox, shape_cy, shape_oy;
110  mutable Vector dshape_cx, dshape_cy;
111 #endif
112  Array<int> dof2tk;
113  const double *cp;
114 
115 public:
116  /** @brief Construct the ND_QuadrilateralElement of order @a p and closed and
117  open BasisType @a cb_type and @a ob_type */
118  ND_QuadrilateralElement(const int p,
119  const int cb_type = BasisType::GaussLobatto,
120  const int ob_type = BasisType::GaussLegendre);
121  virtual void CalcVShape(const IntegrationPoint &ip,
122  DenseMatrix &shape) const;
123  virtual void CalcVShape(ElementTransformation &Trans,
124  DenseMatrix &shape) const
125  { CalcVShape_ND(Trans, shape); }
126  virtual void CalcCurlShape(const IntegrationPoint &ip,
127  DenseMatrix &curl_shape) const;
129  DenseMatrix &I) const
130  { LocalInterpolation_ND(*this, tk, dof2tk, Trans, I); }
132  DenseMatrix &R) const
133  { LocalRestriction_ND(tk, dof2tk, Trans, R); }
134  virtual void GetTransferMatrix(const FiniteElement &fe,
135  ElementTransformation &Trans,
136  DenseMatrix &I) const
137  { LocalInterpolation_ND(CheckVectorFE(fe), tk, dof2tk, Trans, I); }
139  virtual void Project(VectorCoefficient &vc,
140  ElementTransformation &Trans, Vector &dofs) const
141  {
142  if (obasis1d.IsIntegratedType()) { ProjectIntegrated(vc, Trans, dofs); }
143  else { Project_ND(tk, dof2tk, vc, Trans, dofs); }
144  }
146  Vector &dofs) const
147  { Project_ND(tk, dof2tk, vc, Trans, dofs); }
149  MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
150  { ProjectMatrixCoefficient_ND(tk, dof2tk, mc, T, dofs); }
151  virtual void Project(const FiniteElement &fe,
152  ElementTransformation &Trans,
153  DenseMatrix &I) const
154  { Project_ND(tk, dof2tk, fe, Trans, I); }
155  virtual void ProjectGrad(const FiniteElement &fe,
156  ElementTransformation &Trans,
157  DenseMatrix &grad) const
158  { ProjectGrad_ND(tk, dof2tk, fe, Trans, grad); }
159 
160  virtual void GetFaceMap(const int face_id, Array<int> &face_map) const;
161 
162 protected:
164  ElementTransformation &Trans,
165  Vector &dofs) const;
166 };
167 
168 
169 /// Arbitrary order Nedelec elements in 3D on a tetrahedron
171 {
172  static const double tk[18], c;
173 
174 #ifndef MFEM_THREAD_SAFE
175  mutable Vector shape_x, shape_y, shape_z, shape_l;
176  mutable Vector dshape_x, dshape_y, dshape_z, dshape_l;
177  mutable DenseMatrix u;
178 #endif
179  Array<int> dof2tk;
181 
182  mutable ND_TetStatelessDofTransformation doftrans;
183 
184 public:
185  /// Construct the ND_TetrahedronElement of order @a p
186  ND_TetrahedronElement(const int p);
187  virtual void CalcVShape(const IntegrationPoint &ip,
188  DenseMatrix &shape) const;
189  virtual void CalcVShape(ElementTransformation &Trans,
190  DenseMatrix &shape) const
191  { CalcVShape_ND(Trans, shape); }
192  virtual void CalcCurlShape(const IntegrationPoint &ip,
193  DenseMatrix &curl_shape) const;
195  DenseMatrix &I) const
196  { LocalInterpolation_ND(*this, tk, dof2tk, Trans, I); }
198  DenseMatrix &R) const
199  { LocalRestriction_ND(tk, dof2tk, Trans, R); }
200  virtual void GetTransferMatrix(const FiniteElement &fe,
201  ElementTransformation &Trans,
202  DenseMatrix &I) const
203  { LocalInterpolation_ND(CheckVectorFE(fe), tk, dof2tk, Trans, I); }
205  { return &doftrans; }
207  virtual void Project(VectorCoefficient &vc,
208  ElementTransformation &Trans, Vector &dofs) const
209  { Project_ND(tk, dof2tk, vc, Trans, dofs); }
211  Vector &dofs) const
212  { Project_ND(tk, dof2tk, vc, Trans, dofs); }
214  MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
215  { ProjectMatrixCoefficient_ND(tk, dof2tk, mc, T, dofs); }
216  virtual void Project(const FiniteElement &fe,
217  ElementTransformation &Trans,
218  DenseMatrix &I) const
219  { Project_ND(tk, dof2tk, fe, Trans, I); }
220  virtual void ProjectGrad(const FiniteElement &fe,
221  ElementTransformation &Trans,
222  DenseMatrix &grad) const
223  { ProjectGrad_ND(tk, dof2tk, fe, Trans, grad); }
224 
225  virtual void ProjectCurl(const FiniteElement &fe,
226  ElementTransformation &Trans,
227  DenseMatrix &curl) const
228  { ProjectCurl_ND(tk, dof2tk, fe, Trans, curl); }
229 };
230 
231 /// Arbitrary order Nedelec elements in 2D on a triangle
233 {
234  static const double tk[8], c;
235 
236 #ifndef MFEM_THREAD_SAFE
237  mutable Vector shape_x, shape_y, shape_l;
238  mutable Vector dshape_x, dshape_y, dshape_l;
239  mutable DenseMatrix u;
240  mutable Vector curlu;
241 #endif
242  Array<int> dof2tk;
244 
245  mutable ND_TriStatelessDofTransformation doftrans;
246 
247 public:
248  /// Construct the ND_TriangleElement of order @a p
249  ND_TriangleElement(const int p);
250  virtual void CalcVShape(const IntegrationPoint &ip,
251  DenseMatrix &shape) const;
252  virtual void CalcVShape(ElementTransformation &Trans,
253  DenseMatrix &shape) const
254  { CalcVShape_ND(Trans, shape); }
255  virtual void CalcCurlShape(const IntegrationPoint &ip,
256  DenseMatrix &curl_shape) const;
258  DenseMatrix &I) const
259  { LocalInterpolation_ND(*this, tk, dof2tk, Trans, I); }
261  DenseMatrix &R) const
262  { LocalRestriction_ND(tk, dof2tk, Trans, R); }
263  virtual void GetTransferMatrix(const FiniteElement &fe,
264  ElementTransformation &Trans,
265  DenseMatrix &I) const
266  { LocalInterpolation_ND(CheckVectorFE(fe), tk, dof2tk, Trans, I); }
268  { return &doftrans; }
270  virtual void Project(VectorCoefficient &vc,
271  ElementTransformation &Trans, Vector &dofs) const
272  { Project_ND(tk, dof2tk, vc, Trans, dofs); }
274  Vector &dofs) const
275  { Project_ND(tk, dof2tk, vc, Trans, dofs); }
277  MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
278  { ProjectMatrixCoefficient_ND(tk, dof2tk, mc, T, dofs); }
279  virtual void Project(const FiniteElement &fe,
280  ElementTransformation &Trans,
281  DenseMatrix &I) const
282  { Project_ND(tk, dof2tk, fe, Trans, I); }
283  virtual void ProjectGrad(const FiniteElement &fe,
284  ElementTransformation &Trans,
285  DenseMatrix &grad) const
286  { ProjectGrad_ND(tk, dof2tk, fe, Trans, grad); }
287 };
288 
289 
290 /// Arbitrary order Nedelec elements in 1D on a segment
292 {
293  static const double tk[1];
294 
295  Array<int> dof2tk;
296 
297 public:
298  /** @brief Construct the ND_SegmentElement of order @a p and open
299  BasisType @a ob_type */
300  ND_SegmentElement(const int p, const int ob_type = BasisType::GaussLegendre);
301  virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
302  { obasis1d.Eval(ip.x, shape); }
303  virtual void CalcVShape(const IntegrationPoint &ip,
304  DenseMatrix &shape) const;
305  virtual void CalcVShape(ElementTransformation &Trans,
306  DenseMatrix &shape) const
307  { CalcVShape_ND(Trans, shape); }
308  // virtual void CalcCurlShape(const IntegrationPoint &ip,
309  // DenseMatrix &curl_shape) const;
311  DenseMatrix &I) const
312  { LocalInterpolation_ND(*this, tk, dof2tk, Trans, I); }
314  DenseMatrix &R) const
315  { LocalRestriction_ND(tk, dof2tk, Trans, R); }
316  virtual void GetTransferMatrix(const FiniteElement &fe,
317  ElementTransformation &Trans,
318  DenseMatrix &I) const
319  { LocalInterpolation_ND(CheckVectorFE(fe), tk, dof2tk, Trans, I); }
321  virtual void Project(VectorCoefficient &vc,
322  ElementTransformation &Trans, Vector &dofs) const
323  { Project_ND(tk, dof2tk, vc, Trans, dofs); }
325  MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
326  { ProjectMatrixCoefficient_ND(tk, dof2tk, mc, T, dofs); }
327  virtual void Project(const FiniteElement &fe,
328  ElementTransformation &Trans,
329  DenseMatrix &I) const
330  { Project_ND(tk, dof2tk, fe, Trans, I); }
331  virtual void ProjectGrad(const FiniteElement &fe,
332  ElementTransformation &Trans,
333  DenseMatrix &grad) const
334  { ProjectGrad_ND(tk, dof2tk, fe, Trans, grad); }
335 };
336 
338 {
339 private:
340  static const double tk[15];
341 
342 #ifndef MFEM_THREAD_SAFE
343  mutable Vector t1_shape, s1_shape;
344  mutable DenseMatrix tn_shape, sn_shape;
345  mutable DenseMatrix t1_dshape, s1_dshape, tn_dshape;
346 #endif
347  Array<int> dof2tk, t_dof, s_dof;
348 
349  mutable ND_WedgeStatelessDofTransformation doftrans;
350 
351  H1_TriangleElement H1TriangleFE;
352  ND_TriangleElement NDTriangleFE;
353  H1_SegmentElement H1SegmentFE;
354  ND_SegmentElement NDSegmentFE;
355 
356 public:
357  ND_WedgeElement(const int p,
358  const int cb_type = BasisType::GaussLobatto,
359  const int ob_type = BasisType::GaussLegendre);
360 
361  virtual void CalcVShape(const IntegrationPoint &ip,
362  DenseMatrix &shape) const;
363 
364  virtual void CalcVShape(ElementTransformation &Trans,
365  DenseMatrix &shape) const
366  { CalcVShape_ND(Trans, shape); }
367 
368  virtual void CalcCurlShape(const IntegrationPoint &ip,
369  DenseMatrix &curl_shape) const;
370 
372  DenseMatrix &I) const
373  { LocalInterpolation_ND(*this, tk, dof2tk, Trans, I); }
375  DenseMatrix &R) const
376  { LocalRestriction_ND(tk, dof2tk, Trans, R); }
377  virtual void GetTransferMatrix(const FiniteElement &fe,
378  ElementTransformation &Trans,
379  DenseMatrix &I) const
380  { LocalInterpolation_ND(CheckVectorFE(fe), tk, dof2tk, Trans, I); }
381 
383  { return &doftrans; }
384 
386 
387  virtual void Project(VectorCoefficient &vc,
388  ElementTransformation &Trans, Vector &dofs) const
389  { Project_ND(tk, dof2tk, vc, Trans, dofs); }
390 
392  MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
393  { ProjectMatrixCoefficient_ND(tk, dof2tk, mc, T, dofs); }
394 
395  virtual void Project(const FiniteElement &fe,
396  ElementTransformation &Trans,
397  DenseMatrix &I) const
398  { Project_ND(tk, dof2tk, fe, Trans, I); }
399 
400  virtual void ProjectGrad(const FiniteElement &fe,
401  ElementTransformation &Trans,
402  DenseMatrix &grad) const
403  { ProjectGrad_ND(tk, dof2tk, fe, Trans, grad); }
404 
405  virtual void ProjectCurl(const FiniteElement &fe,
406  ElementTransformation &Trans,
407  DenseMatrix &curl) const
408  { ProjectCurl_ND(tk, dof2tk, fe, Trans, curl); }
409 };
410 
411 
412 /// A 0D Nedelec finite element for the boundary of a 1D domain
413 /** ND_R1D_PointElement provides a representation of the trace of a three
414  component Nedelec basis restricted to 1D.
415 */
417 {
418  static const double tk[9];
419 
420 public:
421  /** @brief Construct the ND_R1D_PointElement */
422  ND_R1D_PointElement(int p);
423 
425 
426  virtual void CalcVShape(const IntegrationPoint &ip,
427  DenseMatrix &shape) const;
428 
429  virtual void CalcVShape(ElementTransformation &Trans,
430  DenseMatrix &shape) const;
431 };
432 
433 /// Arbitrary order, three component, Nedelec elements in 1D on a segment
434 /** ND_R1D_SegmentElement provides a representation of a three component Nedelec
435  basis where the vector components vary along only one dimension.
436 */
438 {
439  static const double tk[9];
440 #ifndef MFEM_THREAD_SAFE
441  mutable Vector shape_cx, shape_ox;
442  mutable Vector dshape_cx;
443 #endif
444  Array<int> dof_map, dof2tk;
445 
446  Poly_1D::Basis &cbasis1d, &obasis1d;
447 
448 public:
449  /** @brief Construct the ND_R1D_SegmentElement of order @a p and closed and
450  open BasisType @a cb_type and @a ob_type */
451  ND_R1D_SegmentElement(const int p,
452  const int cb_type = BasisType::GaussLobatto,
453  const int ob_type = BasisType::GaussLegendre);
454 
457 
458  virtual void CalcVShape(const IntegrationPoint &ip,
459  DenseMatrix &shape) const;
460 
461  virtual void CalcVShape(ElementTransformation &Trans,
462  DenseMatrix &shape) const;
463 
464  virtual void CalcCurlShape(const IntegrationPoint &ip,
465  DenseMatrix &curl_shape) const;
466 
467  virtual void CalcPhysCurlShape(ElementTransformation &Trans,
468  DenseMatrix &curl_shape) const;
469 
471  DenseMatrix &I) const
472  { LocalInterpolation_ND(*this, tk, dof2tk, Trans, I); }
473 
475  DenseMatrix &R) const
476  { LocalRestriction_ND(tk, dof2tk, Trans, R); }
477 
478  virtual void GetTransferMatrix(const FiniteElement &fe,
479  ElementTransformation &Trans,
480  DenseMatrix &I) const
481  { LocalInterpolation_ND(CheckVectorFE(fe), tk, dof2tk, Trans, I); }
482 
484 
485  virtual void Project(VectorCoefficient &vc,
486  ElementTransformation &Trans, Vector &dofs) const;
487 
489  Vector &dofs) const
490  { Project_ND(tk, dof2tk, vc, Trans, dofs); }
491 
493  MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
494  { ProjectMatrixCoefficient_ND(tk, dof2tk, mc, T, dofs); }
495 
496  virtual void Project(const FiniteElement &fe,
497  ElementTransformation &Trans,
498  DenseMatrix &I) const;
499 
500  virtual void ProjectGrad(const FiniteElement &fe,
501  ElementTransformation &Trans,
502  DenseMatrix &grad) const
503  { ProjectGrad_ND(tk, dof2tk, fe, Trans, grad); }
504 
505  virtual void ProjectCurl(const FiniteElement &fe,
506  ElementTransformation &Trans,
507  DenseMatrix &curl) const
508  { ProjectCurl_ND(tk, dof2tk, fe, Trans, curl); }
509 };
510 
511 
512 /** ND_R2D_SegmentElement provides a representation of a 3D Nedelec
513  basis where the vector field is assumed constant in the third dimension.
514 */
516 {
517  static const double tk[4];
518 #ifndef MFEM_THREAD_SAFE
519  mutable Vector shape_cx, shape_ox;
520  mutable Vector dshape_cx;
521 #endif
522  Array<int> dof_map, dof2tk;
523 
524  Poly_1D::Basis &cbasis1d, &obasis1d;
525 
526 private:
527  void LocalInterpolation(const VectorFiniteElement &cfe,
528  ElementTransformation &Trans,
529  DenseMatrix &I) const;
530 
531 public:
532  /** @brief Construct the ND_R2D_SegmentElement of order @a p and closed and
533  open BasisType @a cb_type and @a ob_type */
534  ND_R2D_SegmentElement(const int p,
535  const int cb_type = BasisType::GaussLobatto,
536  const int ob_type = BasisType::GaussLegendre);
537 
538  virtual void CalcVShape(const IntegrationPoint &ip,
539  DenseMatrix &shape) const;
540 
541  virtual void CalcVShape(ElementTransformation &Trans,
542  DenseMatrix &shape) const;
543 
544  virtual void CalcCurlShape(const IntegrationPoint &ip,
545  DenseMatrix &curl_shape) const;
546 
548  DenseMatrix &I) const
549  { LocalInterpolation(*this, Trans, I); }
550 
552  DenseMatrix &R) const
553  { MFEM_ABORT("method is not overloaded"); }
554 
555  virtual void GetTransferMatrix(const FiniteElement &fe,
556  ElementTransformation &Trans,
557  DenseMatrix &I) const
558  { LocalInterpolation(CheckVectorFE(fe), Trans, I); }
559 
561 
562  virtual void Project(VectorCoefficient &vc,
563  ElementTransformation &Trans, Vector &dofs) const;
564 };
565 
567 {
568 protected:
569  const double *tk;
571 
572  ND_R2D_FiniteElement(int p, Geometry::Type G, int Do, const double *tk_fe);
573 
574 private:
575  void LocalInterpolation(const VectorFiniteElement &cfe,
576  ElementTransformation &Trans,
577  DenseMatrix &I) const;
578 
579 public:
582 
583  virtual void CalcVShape(ElementTransformation &Trans,
584  DenseMatrix &shape) const;
585 
586  virtual void CalcPhysCurlShape(ElementTransformation &Trans,
587  DenseMatrix &curl_shape) const;
588 
590  DenseMatrix &I) const
591  { LocalInterpolation(*this, Trans, I); }
592 
593  virtual void GetLocalRestriction(ElementTransformation &Trans,
594  DenseMatrix &R) const;
595 
596  virtual void GetTransferMatrix(const FiniteElement &fe,
597  ElementTransformation &Trans,
598  DenseMatrix &I) const
599  { LocalInterpolation(CheckVectorFE(fe), Trans, I); }
600 
602 
603  virtual void Project(VectorCoefficient &vc,
604  ElementTransformation &Trans, Vector &dofs) const;
605 
606  virtual void Project(const FiniteElement &fe, ElementTransformation &Trans,
607  DenseMatrix &I) const;
608 
609  virtual void ProjectGrad(const FiniteElement &fe,
610  ElementTransformation &Trans,
611  DenseMatrix &grad) const;
612 };
613 
614 /// Arbitrary order Nedelec 3D elements in 2D on a triangle
616 {
617 private:
618  static const double tk_t[15];
619 
620 #ifndef MFEM_THREAD_SAFE
621  mutable DenseMatrix nd_shape;
622  mutable Vector h1_shape;
623  mutable DenseMatrix nd_dshape;
624  mutable DenseMatrix h1_dshape;
625 #endif
626 
627  ND_TriangleElement ND_FE;
628  H1_TriangleElement H1_FE;
629 
630 public:
631  /// Construct the ND_R2D_TriangleElement of order @a p
632  ND_R2D_TriangleElement(const int p,
633  const int cb_type = BasisType::GaussLobatto);
634 
637 
638  virtual void CalcVShape(const IntegrationPoint &ip,
639  DenseMatrix &shape) const;
640  virtual void CalcCurlShape(const IntegrationPoint &ip,
641  DenseMatrix &curl_shape) const;
642 };
643 
644 
645 /// Arbitrary order Nedelec 3D elements in 2D on a square
647 {
648  static const double tk_q[15];
649 
650 #ifndef MFEM_THREAD_SAFE
651  mutable Vector shape_cx, shape_ox, shape_cy, shape_oy;
652  mutable Vector dshape_cx, dshape_cy;
653 #endif
654 
655  Poly_1D::Basis &cbasis1d, &obasis1d;
656 
657 public:
658  /** @brief Construct the ND_R2D_QuadrilateralElement of order @a p and
659  closed and open BasisType @a cb_type and @a ob_type */
660  ND_R2D_QuadrilateralElement(const int p,
661  const int cb_type = BasisType::GaussLobatto,
662  const int ob_type = BasisType::GaussLegendre);
663 
666 
667  virtual void CalcVShape(const IntegrationPoint &ip,
668  DenseMatrix &shape) const;
669  virtual void CalcCurlShape(const IntegrationPoint &ip,
670  DenseMatrix &curl_shape) const;
671 };
672 
673 
674 } // namespace mfem
675 
676 #endif
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_nd.hpp:316
Abstract class for all finite elements.
Definition: fe_base.hpp:233
DoF transformation implementation for the Nedelec basis on tetrahedra.
Definition: doftrans.hpp:471
virtual void CalcVShape(ElementTransformation &Trans, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in physical space at the point ...
Definition: fe_nd.hpp:189
virtual void ProjectGrad(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &grad) const
Compute the discrete gradient matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the matrix depends on it.
Definition: fe_nd.hpp:220
A 0D Nedelec finite element for the boundary of a 1D domain.
Definition: fe_nd.hpp:416
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_nd.hpp:377
Arbitrary order Nedelec elements in 1D on a segment.
Definition: fe_nd.hpp:291
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_nd.hpp:555
ND_SegmentElement(const int p, const int ob_type=BasisType::GaussLegendre)
Construct the ND_SegmentElement of order p and open BasisType ob_type.
Definition: fe_nd.cpp:1268
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_nd.hpp:128
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition: fe_nd.cpp:1595
virtual void CalcCurlShape(const IntegrationPoint &ip, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in reference space at the given p...
Definition: fe_nd.cpp:1546
bool IsIntegratedType() const
Returns true if the basis is "integrated", false otherwise.
Definition: fe_base.hpp:1023
virtual void ProjectGrad(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &grad) const
Compute the discrete gradient matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the matrix depends on it.
Definition: fe_nd.hpp:84
virtual void Project(VectorCoefficient &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector coefficient and a transformation, compute its projection (approximation) in the local ...
Definition: fe_nd.cpp:1781
virtual void ProjectMatrixCoefficient(MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
Given a matrix coefficient and a transformation, compute an approximation ("projection") in the local...
Definition: fe_nd.hpp:148
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition: fe_nd.cpp:700
Base class for vector Coefficients that optionally depend on time and space.
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition: fe_nd.cpp:1285
Arbitrary order Nedelec 3D elements in 2D on a square.
Definition: fe_nd.hpp:646
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_nd.hpp:49
ND_R1D_PointElement(int p)
Construct the ND_R1D_PointElement.
Definition: fe_nd.cpp:1584
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_nd.hpp:200
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_nd.hpp:551
virtual void Project(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &I) const
Compute the embedding/projection matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the projection depends on it.
Definition: fe_nd.hpp:327
void ProjectIntegrated(VectorCoefficient &vc, ElementTransformation &Trans, Vector &dofs) const
Definition: fe_nd.cpp:245
virtual void CalcCurlShape(const IntegrationPoint &ip, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in reference space at the given p...
Definition: fe_nd.cpp:763
virtual void Project(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &I) const
Compute the embedding/projection matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the projection depends on it.
Definition: fe_nd.hpp:395
virtual void Project(VectorCoefficient &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector coefficient and a transformation, compute its projection (approximation) in the local ...
Definition: fe_nd.hpp:321
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition: fe_nd.cpp:1939
virtual void ProjectMatrixCoefficient(MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
Given a matrix coefficient and a transformation, compute an approximation ("projection") in the local...
Definition: fe_nd.hpp:492
virtual void Project(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &I) const
Compute the embedding/projection matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the projection depends on it.
Definition: fe_nd.hpp:79
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_nd.hpp:478
Data type dense matrix using column-major storage.
Definition: densemat.hpp:23
ND_R2D_TriangleElement(const int p, const int cb_type=BasisType::GaussLobatto)
Construct the ND_R2D_TriangleElement of order p.
Definition: fe_nd.cpp:2355
ND_R2D_SegmentElement(const int p, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Construct the ND_R2D_SegmentElement of order p and closed and open BasisType cb_type and ob_type...
Definition: fe_nd.cpp:1890
void Eval(const double x, Vector &u) const
Evaluate the basis functions at point x in [0,1].
Definition: fe_base.cpp:1675
Arbitrary order Nedelec elements in 3D on a tetrahedron.
Definition: fe_nd.hpp:170
virtual StatelessDofTransformation * GetDofTransformation() const
Return a DoF transformation object for this particular type of basis.
Definition: fe_nd.hpp:204
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_nd.hpp:263
virtual void CalcVShape(ElementTransformation &Trans, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in physical space at the point ...
Definition: fe_nd.cpp:2093
virtual StatelessDofTransformation * GetDofTransformation() const
Return a DoF transformation object for this particular type of basis.
Definition: fe_nd.hpp:267
void ProjectIntegrated(VectorCoefficient &vc, ElementTransformation &Trans, Vector &dofs) const
Definition: fe_nd.cpp:624
Arbitrary order, three component, Nedelec elements in 1D on a segment.
Definition: fe_nd.hpp:437
Intermediate class for finite elements whose basis functions return vector values.
Definition: fe_base.hpp:788
void ProjectCurl_ND(const double *tk, const Array< int > &d2t, const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &curl) const
Definition: fe_base.cpp:1147
virtual void CalcVShape(ElementTransformation &Trans, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in physical space at the point ...
Definition: fe_nd.hpp:364
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition: fe_nd.cpp:1189
Arbitrary order Nedelec elements in 2D on a triangle.
Definition: fe_nd.hpp:232
ND_WedgeElement(const int p, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Definition: fe_nd.cpp:1296
void ProjectMatrixCoefficient_ND(const double *tk, const Array< int > &d2t, MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
Project the rows of the matrix coefficient in an ND space.
Definition: fe_base.cpp:1233
virtual void Project(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &I) const
Compute the embedding/projection matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the projection depends on it.
Definition: fe_nd.hpp:216
ND_TriangleElement(const int p)
Construct the ND_TriangleElement of order p.
Definition: fe_nd.cpp:1108
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_nd.hpp:260
virtual void ProjectMatrixCoefficient(MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
Given a matrix coefficient and a transformation, compute an approximation ("projection") in the local...
Definition: fe_nd.hpp:276
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:126
virtual void ProjectGrad(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &grad) const
Compute the discrete gradient matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the matrix depends on it.
Definition: fe_nd.hpp:283
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_nd.hpp:57
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition: fe_nd.cpp:1677
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_nd.hpp:371
ND_R2D_QuadrilateralElement(const int p, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Construct the ND_R2D_QuadrilateralElement of order p and closed and open BasisType cb_type and ob_typ...
Definition: fe_nd.cpp:2496
virtual void CalcCurlShape(const IntegrationPoint &ip, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in reference space at the given p...
Definition: fe_nd.cpp:1223
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_nd.hpp:589
void LocalRestriction_ND(const double *tk, const Array< int > &d2t, ElementTransformation &Trans, DenseMatrix &R) const
Definition: fe_base.cpp:1569
virtual void ProjectMatrixCoefficient(MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
Given a matrix coefficient and a transformation, compute an approximation ("projection") in the local...
Definition: fe_nd.hpp:75
virtual void ProjectFromNodes(Vector &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector of values at the finite element nodes and a transformation, compute its projection (ap...
Definition: fe_nd.hpp:273
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition: fe_nd.cpp:1512
virtual void ProjectMatrixCoefficient(MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
Given a matrix coefficient and a transformation, compute an approximation ("projection") in the local...
Definition: fe_nd.hpp:213
virtual void CalcPhysCurlShape(ElementTransformation &Trans, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in physical space at the point de...
Definition: fe_nd.cpp:2110
virtual void ProjectFromNodes(Vector &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector of values at the finite element nodes and a transformation, compute its projection (ap...
Definition: fe_nd.hpp:145
ND_HexahedronElement(const int p, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Construct the ND_HexahedronElement of order p and closed and open BasisType cb_type and ob_type...
Definition: fe_nd.cpp:26
virtual void ProjectFromNodes(Vector &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector of values at the finite element nodes and a transformation, compute its projection (ap...
Definition: fe_nd.hpp:210
virtual void Project(VectorCoefficient &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector coefficient and a transformation, compute its projection (approximation) in the local ...
Definition: fe_nd.hpp:270
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_nd.hpp:134
ND_R2D_FiniteElement(int p, Geometry::Type G, int Do, const double *tk_fe)
Definition: fe_nd.cpp:2075
ND_TetrahedronElement(const int p)
Construct the ND_TetrahedronElement of order p.
Definition: fe_nd.cpp:846
virtual void CalcCurlShape(const IntegrationPoint &ip, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in reference space at the given p...
Definition: fe_nd.cpp:2683
virtual void Project(VectorCoefficient &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector coefficient and a transformation, compute its projection (approximation) in the local ...
Definition: fe_nd.hpp:207
virtual void CalcCurlShape(const IntegrationPoint &ip, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in reference space at the given p...
Definition: fe_nd.cpp:1036
virtual void CalcPhysCurlShape(ElementTransformation &Trans, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in physical space at the point de...
Definition: fe_base.cpp:71
virtual void CalcVShape(ElementTransformation &Trans, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in physical space at the point ...
Definition: fe_nd.hpp:123
const double * tk
Definition: fe_nd.hpp:569
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition: fe_nd.cpp:994
virtual void ProjectFromNodes(Vector &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector of values at the finite element nodes and a transformation, compute its projection (ap...
Definition: fe_nd.hpp:488
virtual void Project(VectorCoefficient &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector coefficient and a transformation, compute its projection (approximation) in the local ...
Definition: fe_nd.cpp:2219
virtual void Project(VectorCoefficient &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector coefficient and a transformation, compute its projection (approximation) in the local ...
Definition: fe_nd.hpp:387
ND_R1D_SegmentElement(const int p, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Construct the ND_R1D_SegmentElement of order p and closed and open BasisType cb_type and ob_type...
Definition: fe_nd.cpp:1613
virtual void CalcCurlShape(const IntegrationPoint &ip, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in reference space at the given p...
Definition: fe_nd.cpp:1730
virtual void ProjectMatrixCoefficient(MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
Given a matrix coefficient and a transformation, compute an approximation ("projection") in the local...
Definition: fe_nd.hpp:391
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition: fe_nd.cpp:2623
virtual void CalcCurlShape(const IntegrationPoint &ip, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in reference space at the given p...
Definition: fe_nd.cpp:400
virtual void ProjectCurl(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &curl) const
Compute the discrete curl matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the matrix depends on it.
Definition: fe_nd.hpp:225
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_nd.hpp:547
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition: fe_nd.cpp:310
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_nd.hpp:474
virtual void CalcCurlShape(const IntegrationPoint &ip, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in reference space at the given p...
Definition: fe_nd.cpp:1982
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_nd.hpp:194
ND_QuadrilateralElement(const int p, const int cb_type=BasisType::GaussLobatto, const int ob_type=BasisType::GaussLegendre)
Construct the ND_QuadrilateralElement of order p and closed and open BasisType cb_type and ob_type...
Definition: fe_nd.cpp:533
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_nd.hpp:596
virtual void GetFaceMap(const int face_id, Array< int > &face_map) const
Return the mapping from lexicographic face DOFs to lexicographic element DOFs for the given local fac...
Definition: fe_nd.cpp:485
virtual void CalcVShape(ElementTransformation &Trans, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in physical space at the point ...
Definition: fe_nd.hpp:42
virtual void ProjectGrad(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &grad) const
Compute the discrete gradient matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the matrix depends on it.
Definition: fe_nd.hpp:331
void LocalInterpolation_ND(const VectorFiniteElement &cfe, const double *tk, const Array< int > &d2t, ElementTransformation &Trans, DenseMatrix &I) const
Definition: fe_base.cpp:1487
Base class for Matrix Coefficients that optionally depend on time and space.
virtual void ProjectCurl(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &curl) const
Compute the discrete curl matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the matrix depends on it.
Definition: fe_nd.hpp:89
virtual void Project(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &I) const
Compute the embedding/projection matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the projection depends on it.
Definition: fe_nd.hpp:279
virtual void ProjectFromNodes(Vector &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector of values at the finite element nodes and a transformation, compute its projection (ap...
Definition: fe_nd.hpp:71
Arbitrary order Nedelec elements in 2D on a square.
Definition: fe_nd.hpp:104
Class for integration point with weight.
Definition: intrules.hpp:31
virtual StatelessDofTransformation * GetDofTransformation() const
Return a DoF transformation object for this particular type of basis.
Definition: fe_nd.hpp:382
virtual void ProjectGrad(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &grad) const
Compute the discrete gradient matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the matrix depends on it.
Definition: fe_nd.hpp:155
virtual void ProjectMatrixCoefficient(MatrixCoefficient &mc, ElementTransformation &T, Vector &dofs) const
Given a matrix coefficient and a transformation, compute an approximation ("projection") in the local...
Definition: fe_nd.hpp:324
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_nd.hpp:313
Arbitrary order H1 elements in 2D on a triangle.
Definition: fe_h1.hpp:83
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_nd.hpp:197
Arbitrary order H1 elements in 1D.
Definition: fe_h1.hpp:21
virtual void ProjectGrad(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &grad) const
Compute the discrete gradient matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the matrix depends on it.
Definition: fe_nd.hpp:400
virtual void Project(VectorCoefficient &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector coefficient and a transformation, compute its projection (approximation) in the local ...
Definition: fe_nd.hpp:64
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_nd.hpp:257
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition: fe_base.cpp:40
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_nd.hpp:53
Class for evaluating 1D nodal, positive (Bernstein), or integrated (Gerritsma) bases.
Definition: fe_base.hpp:978
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const
Overrides the scalar CalcShape function to print an error.
Definition: fe_nd.hpp:301
virtual void CalcCurlShape(const IntegrationPoint &ip, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in reference space at the given p...
Definition: fe_nd.cpp:2463
Arbitrary order Nedelec 3D elements in 2D on a triangle.
Definition: fe_nd.hpp:615
Arbitrary order Nedelec elements in 3D on a cube.
Definition: fe_nd.hpp:22
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_nd.hpp:374
virtual void Project(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &I) const
Compute the embedding/projection matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the projection depends on it.
Definition: fe_nd.hpp:151
DoF transformation implementation for the Nedelec basis on wedge elements.
Definition: doftrans.hpp:504
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_nd.cpp:2173
virtual void Project(VectorCoefficient &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector coefficient and a transformation, compute its projection (approximation) in the local ...
Definition: fe_nd.hpp:139
virtual void ProjectGrad(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &grad) const
Compute the discrete gradient matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the matrix depends on it.
Definition: fe_nd.hpp:500
virtual void GetFaceMap(const int face_id, Array< int > &face_map) const
Return the mapping from lexicographic face DOFs to lexicographic element DOFs for the given local fac...
Definition: fe_nd.cpp:820
Vector data type.
Definition: vector.hpp:58
void CalcVShape_ND(ElementTransformation &Trans, DenseMatrix &shape) const
Definition: fe_base.cpp:969
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_nd.hpp:470
virtual void Project(VectorCoefficient &vc, ElementTransformation &Trans, Vector &dofs) const
Given a vector coefficient and a transformation, compute its projection (approximation) in the local ...
Definition: fe_nd.cpp:2050
virtual void ProjectCurl(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &curl) const
Compute the discrete curl matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the matrix depends on it.
Definition: fe_nd.hpp:505
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition: fe_nd.cpp:2434
static const VectorFiniteElement & CheckVectorFE(const FiniteElement &fe)
Definition: fe_base.hpp:949
Array< int > dof_map
Definition: fe_nd.hpp:570
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_nd.hpp:310
void Project_ND(const double *tk, const Array< int > &d2t, VectorCoefficient &vc, ElementTransformation &Trans, Vector &dofs) const
Project a vector coefficient onto the ND basis functions.
Definition: fe_base.cpp:1204
virtual void CalcVShape(ElementTransformation &Trans, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in physical space at the point ...
Definition: fe_nd.hpp:305
virtual void CalcVShape(ElementTransformation &Trans, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in physical space at the point ...
Definition: fe_nd.hpp:252
virtual void CalcPhysCurlShape(ElementTransformation &Trans, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in physical space at the point de...
Definition: fe_nd.cpp:1770
void ProjectGrad_ND(const double *tk, const Array< int > &d2t, const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &grad) const
Definition: fe_base.cpp:1332
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_nd.hpp:131
virtual void ProjectGrad(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &grad) const
Compute the discrete gradient matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the matrix depends on it.
Definition: fe_nd.cpp:2331
virtual void ProjectCurl(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &curl) const
Compute the discrete curl matrix from the given FiniteElement onto &#39;this&#39; FiniteElement. The ElementTransformation is included to support cases when the matrix depends on it.
Definition: fe_nd.hpp:405