MFEM v4.8.0
Finite element discretization library
Loading...
Searching...
No Matches
fe_nurbs.hpp
Go to the documentation of this file.
1// Copyright (c) 2010-2025, 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_NURBS
13#define MFEM_FE_NURBS
14
15#include "fe_base.hpp"
16
17namespace mfem
18{
19
20class KnotVector;
21
22/// An arbitrary order and dimension NURBS element
24{
25protected:
26 mutable Array <const KnotVector*> kv;
27 mutable const int *ijk;
28 mutable int patch, elem;
29 mutable Vector weights;
30
31public:
32 /** @brief Construct NURBSFiniteElement with given
33 @param dim Reference space dimension
34 */
36 {
37 ijk = NULL;
38 patch = elem = -1;
39 kv.SetSize(dim);
40 }
41
42 /// Resets the patch and element data stored in the element
43 void Reset () const { patch = elem = -1; }
44 /// Set which IJK in patch should be evaluated
45 void SetIJK (const int *IJK) const { ijk = IJK; }
46 /// Get which patch is currently considered
47 int GetPatch () const { return patch; }
48 /// Set which patch should be evaluated
49 void SetPatch (int p) const { patch = p; }
50 /// Set which element should be evaluated
51 int GetElement () const { return elem; }
52 /// Get which element is currently considered
53 void SetElement (int e) const { elem = e; }
54 /// Get the KnotVectors
55 Array <const KnotVector*> &KnotVectors() const { return kv; }
56 /// Get the Weights
57 Vector &Weights () const { return weights; }
58 /// Update the polynomial order according to the currently set knotvectors
59 /// Resizes all internal data members to have the correct size
60 /// related to the polynomial order
61 virtual void SetOrder () const { }
62
63 /// Returns the indices (i,j) in 2D or (i,j,k) in 3D of this element in the
64 /// tensor product ordering of the patch.
65 const int* GetIJK() const { return ijk; }
66};
67
68
69/// An arbitrary order 1D NURBS element on a segment
72{
73protected:
74 mutable Vector shape_x;
75
76public:
77 /// Construct the NURBS1DFiniteElement of order @a p
79 : ScalarFiniteElement(1, Geometry::SEGMENT, p + 1, p, FunctionSpace::Qk),
81 shape_x(p + 1) { }
82
83 void SetOrder() const override;
84 void CalcShape(const IntegrationPoint &ip, Vector &shape) const override;
85 void CalcDShape(const IntegrationPoint &ip,
86 DenseMatrix &dshape) const override;
87 void CalcHessian (const IntegrationPoint &ip,
88 DenseMatrix &hessian) const override;
89};
90
91/// An arbitrary order 2D NURBS element on a square
94{
95protected:
97 mutable DenseMatrix du;
98
99public:
100 /// Construct the NURBS2DFiniteElement of order @a p
102 : ScalarFiniteElement(2, Geometry::SQUARE, (p + 1)*(p + 1), p,
103 FunctionSpace::Qk),
105 u(dof), shape_x(p + 1), shape_y(p + 1), dshape_x(p + 1),
106 dshape_y(p + 1), d2shape_x(p + 1), d2shape_y(p + 1), du(dof,2)
107 { orders[0] = orders[1] = p; }
108
109 /// Construct the NURBS2DFiniteElement with x-order @a px and y-order @a py
110 NURBS2DFiniteElement(int px, int py)
111 : ScalarFiniteElement(2, Geometry::SQUARE, (px + 1)*(py + 1),
112 std::max(px, py), FunctionSpace::Qk),
114 u(dof), shape_x(px + 1), shape_y(py + 1), dshape_x(px + 1),
115 dshape_y(py + 1), d2shape_x(px + 1), d2shape_y(py + 1), du(dof,2)
116 { orders[0] = px; orders[1] = py; }
117
118 void SetOrder() const override;
119 void CalcShape(const IntegrationPoint &ip, Vector &shape) const override;
120 void CalcDShape(const IntegrationPoint &ip,
121 DenseMatrix &dshape) const override;
122 void CalcHessian (const IntegrationPoint &ip,
123 DenseMatrix &hessian) const override;
124};
125
126/// An arbitrary order 3D NURBS element on a cube
128 public NURBSFiniteElement
129{
130protected:
135
136public:
137 /// Construct the NURBS3DFiniteElement of order @a p
139 : ScalarFiniteElement(3, Geometry::CUBE, (p + 1)*(p + 1)*(p + 1), p,
140 FunctionSpace::Qk),
142 u(dof), shape_x(p + 1), shape_y(p + 1), shape_z(p + 1),
143 dshape_x(p + 1), dshape_y(p + 1), dshape_z(p + 1),
144 d2shape_x(p + 1), d2shape_y(p + 1), d2shape_z(p + 1), du(dof,3)
145 { orders[0] = orders[1] = orders[2] = p; }
146
147 /// Construct the NURBS3DFiniteElement with x-order @a px and y-order @a py
148 /// and z-order @a pz
149 NURBS3DFiniteElement(int px, int py, int pz)
150 : ScalarFiniteElement(3, Geometry::CUBE, (px + 1)*(py + 1)*(pz + 1),
151 std::max(std::max(px,py),pz), FunctionSpace::Qk),
153 u(dof), shape_x(px + 1), shape_y(py + 1), shape_z(pz + 1),
154 dshape_x(px + 1), dshape_y(py + 1), dshape_z(pz + 1),
155 d2shape_x(px + 1), d2shape_y(py + 1), d2shape_z(pz + 1), du(dof,3)
156 { orders[0] = px; orders[1] = py; orders[2] = pz; }
157
158 void SetOrder() const override;
159 void CalcShape(const IntegrationPoint &ip, Vector &shape) const override;
160 void CalcDShape(const IntegrationPoint &ip,
161 DenseMatrix &dshape) const override;
162 void CalcHessian (const IntegrationPoint &ip,
163 DenseMatrix &hessian) const override;
164};
165
166
167/** An arbitrary order H(div)-conforming 2D NURBS element on a square.
168 More details in the following papers:
169
170[1] Annalisa Buffa, Carlo De Falco, Giancarlo Sangalli
171"Isogeometric analysis: stable elements for the 2D Stokes equation."
172International Journal for Numerical Methods in Fluids 65 (11‐12) 1407-1422
173
174[2] John A Evans, Thomas JR Hughes
175"Isogeometric divergence-conforming B-splines for the unsteady Navier–Stokes equations."
176Journal of Computational Physics (241) 141-167
177*/
179 public NURBSFiniteElement
180{
181protected:
184 mutable Vector u;
186 mutable Array <const KnotVector*> kv1;
187
188public:
189 /// Construct the NURBS_HDiv2DFiniteElement of order @a p
191 : VectorFiniteElement(2, Geometry::SQUARE, 2*(p + 1)*(p + 2), p,
192 H_DIV,FunctionSpace::Qk),
194 shape_x(p + 1), shape_y(p + 1), dshape_x(p + 1),
195 dshape_y(p + 1), d2shape_x(p + 1), d2shape_y(p + 1),
196 shape1_x(p + 2), shape1_y(p + 2), dshape1_x(p + 2),
197 dshape1_y(p + 2), d2shape1_x(p + 2), d2shape1_y(p + 2),
198 u(dof), du(dof,2)
199 {
200 orders[0] = orders[1] = p;
201 kv1.SetSize(dim);
202 kv1[0] = nullptr;
203 kv1[1] = nullptr;
204 }
205
206 /// Construct the NURBS_HDiv2DFiniteElement with x-order @a px and y-order @a py
208 : VectorFiniteElement(2, Geometry::SQUARE,
209 (px + 2)*(py + 1)+(px + 1)*(py + 2),
210 std::max(px, py), H_DIV, FunctionSpace::Qk),
212 shape_x(px + 1), shape_y(py + 1), dshape_x(px + 1),
213 dshape_y(py + 1), d2shape_x(px + 1), d2shape_y(py + 1),
214 shape1_x(px + 2), shape1_y(py + 2), dshape1_x(px + 2),
215 dshape1_y(py + 2), d2shape1_x(px + 2), d2shape1_y(py + 2),
216 u(dof), du(dof,2)
217 {
218 orders[0] = px; orders[1] = py;
219 kv1.SetSize(dim);
220 kv1[0] = nullptr;
221 kv1[1] = nullptr;
222 }
223
224 void SetOrder() const override;
225
226 void CalcVShape(const IntegrationPoint &ip,
227 DenseMatrix &shape) const override;
228
229 /** @brief Evaluate the values of all shape functions of a *vector* finite
230 element in physical space at the point described by @a Trans. */
231 /** Each row of the result DenseMatrix @a shape contains the components of
232 one vector shape function. The size (#dof x SDim) of @a shape must be set
233 in advance, where SDim >= #dim is the physical space dimension as
234 described by @a Trans. */
236 DenseMatrix &shape) const override;
237
238 /** @brief Evaluate the divergence of all shape functions of a *vector*
239 finite element in reference space at the given point @a ip. */
240 /** The size (#dof) of the result Vector @a divshape must be set in advance.
241 */
242 void CalcDivShape(const IntegrationPoint &ip,
243 Vector &divshape) const override;
244
246};
247
248
249/** An arbitrary order H(div)-conforming 3D NURBS element on a cube
250 More details in the following papers:
251
252 [1] Annalisa Buffa, Carlo De Falco, Giancarlo Sangalli
253 "Isogeometric analysis: stable elements for the 2D Stokes equation."
254 International Journal for Numerical Methods in Fluids 65 (11‐12) 1407-1422
255
256 [2] John A Evans, Thomas JR Hughes
257 "Isogeometric divergence-conforming B-splines for the unsteady
258 Navier–Stokes equations."
259 Journal of Computational Physics (241) 141-167 */
261 public NURBSFiniteElement
262{
263protected:
270 mutable Vector u;
272 mutable Array <const KnotVector*> kv1;
273
274public:
275 /// Construct the NURBS_HDiv3DFiniteElement of order @a p
277 : VectorFiniteElement(3, Geometry::CUBE, 3*(p + 1)*(p + 1)*(p + 2),
278 p, H_DIV,FunctionSpace::Qk),
280 shape_x(p + 1), shape_y(p + 1), shape_z(p + 1),
281 dshape_x(p + 1), dshape_y(p + 1), dshape_z(p + 1),
282 d2shape_x(p + 1), d2shape_y(p + 1), d2shape_z(p + 1),
283 shape1_x(p + 2), shape1_y(p + 2), shape1_z(p + 2),
284 dshape1_x(p + 2), dshape1_y(p + 2),dshape1_z(p + 2),
285 d2shape1_x(p + 2), d2shape1_y(p + 2), d2shape1_z(p + 2),
286 u(dof), du(dof,3)
287 {
288 orders[0] = orders[1] = orders[2] = p;
289 kv1.SetSize(dim);
290 kv1[0] = nullptr;
291 kv1[1] = nullptr;
292 kv1[2] = nullptr;
293 }
294
295 /// Construct the NURBS_HDiv3DFiniteElement with x-order @a px, y-order @a py and z-order @a pz
296 NURBS_HDiv3DFiniteElement(int px, int py, int pz)
297 : VectorFiniteElement(3, Geometry::CUBE,
298 (px + 2)*(py + 1)*(pz + 1) +
299 (px + 1)*(py + 2)*(pz + 1) +
300 (px + 1)*(py + 1)*(pz + 2),
301 std::max(px, py), H_DIV, FunctionSpace::Qk),
303 shape_x(px + 1), shape_y(py + 1), shape_z(pz + 1),
304 dshape_x(px + 1), dshape_y(py + 1), dshape_z(pz + 1),
305 d2shape_x(px + 1), d2shape_y(py + 1), d2shape_z(pz + 1),
306 shape1_x(px + 2), shape1_y(py + 2), shape1_z(pz + 2),
307 dshape1_x(px + 2), dshape1_y(py + 2),dshape1_z(pz + 2),
308 d2shape1_x(px + 2), d2shape1_y(py + 2), d2shape1_z(pz + 2),
309 u(dof), du(dof,3)
310 {
311 orders[0] = px; orders[1] = py; orders[2] = pz;
312 kv1.SetSize(dim);
313 kv1[0] = nullptr;
314 kv1[1] = nullptr;
315 kv1[2] = nullptr;
316 }
317
318 void SetOrder() const override;
319
320 void CalcVShape(const IntegrationPoint &ip,
321 DenseMatrix &shape) const override;
322
323 /** @brief Evaluate the values of all shape functions of a *vector* finite
324 element in physical space at the point described by @a Trans. */
325 /** Each row of the result DenseMatrix @a shape contains the components of
326 one vector shape function. The size (#dof x SDim) of @a shape must be set
327 in advance, where SDim >= #dim is the physical space dimension as
328 described by @a Trans. */
330 DenseMatrix &shape) const override;
331
332 /** @brief Evaluate the divergence of all shape functions of a *vector*
333 finite element in reference space at the given point @a ip. */
334 /** The size (#dof) of the result Vector @a divshape must be set in advance.
335 */
336 void CalcDivShape(const IntegrationPoint &ip,
337 Vector &divshape) const override;
338
340};
341
342
343/** An arbitrary order H(curl)-conforming 2D NURBS element on a square
344 More details in the following paper:
345
346 [1] Annalisa Buffa, Giancarlo Sangalli, Rafael Vázquez
347 "Isogeometric analysis in electromagnetics: B-splines approximation."
348 Computer Methods in Applied Mechanics and Engineering (199) 1143-1152 */
350 public NURBSFiniteElement
351{
352protected:
355 mutable Vector u;
357 mutable Array <const KnotVector*> kv1;
358
359public:
360 /// Construct the NURBS_HCurl2DFiniteElement of order @a p
362 : VectorFiniteElement(2, Geometry::SQUARE, 2*(p + 1)*(p + 2), p,
365 shape_x(p + 1), shape_y(p + 1), dshape_x(p + 1),
366 dshape_y(p + 1), d2shape_x(p + 1), d2shape_y(p + 1),
367 shape1_x(p + 2), shape1_y(p + 2), dshape1_x(p + 2),
368 dshape1_y(p + 2), d2shape1_x(p + 2), d2shape1_y(p + 2),
369 u(dof), du(dof,2)
370 {
371 orders[0] = orders[1] = p;
372 kv1.SetSize(dim);
373 kv1[0] = nullptr;
374 kv1[1] = nullptr;
375 }
376
377 /// Construct the NURBS_HCurl2DFiniteElement with x-order @a px and y-order @a py
379 : VectorFiniteElement(2, Geometry::SQUARE,
380 (px + 1)*(py + 2)+(px + 2)*(py + 1),
381 std::max(px, py), H_CURL, FunctionSpace::Qk),
383 shape_x(px + 1), shape_y(py + 1), dshape_x(px + 1),
384 dshape_y(py + 1), d2shape_x(px + 1), d2shape_y(py + 1),
385 shape1_x(px + 2), shape1_y(py + 2), dshape1_x(px + 2),
386 dshape1_y(py + 2), d2shape1_x(px + 2), d2shape1_y(py + 2),
387 u(dof), du(dof,2)
388 {
389 orders[0] = px; orders[1] = py;
390 kv1.SetSize(dim);
391 kv1[0] = nullptr;
392 kv1[1] = nullptr;
393 }
394
395 void SetOrder() const override;
396
397 void CalcVShape(const IntegrationPoint &ip,
398 DenseMatrix &shape) const override;
399
400 /** @brief Evaluate the values of all shape functions of a *vector* finite
401 element in physical space at the point described by @a Trans. */
402 /** Each row of the result DenseMatrix @a shape contains the components of
403 one vector shape function. The size (#dof x SDim) of @a shape must be set
404 in advance, where SDim >= #dim is the physical space dimension as
405 described by @a Trans. */
407 DenseMatrix &shape) const override;
408
409 /** @brief Evaluate the curl of all shape functions of a *vector* finite
410 element in reference space at the given point @a ip. */
411 /** Each row of the result DenseMatrix @a curl_shape contains the components
412 of the curl of one vector shape function. The size (#dof x CDim) of
413 @a curl_shape must be set in advance, where CDim = 3 for #dim = 3 and
414 CDim = 1 for #dim = 2. */
415 void CalcCurlShape(const IntegrationPoint &ip,
416 DenseMatrix &curl_shape) const override;
417
419};
420
421
422/** An arbitrary order H(curl)-conforming 3D NURBS element on a cube
423 More details in the following paper:
424
425 [1] Annalisa Buffa, Giancarlo Sangalli, Rafael Vázquez
426 "Isogeometric analysis in electromagnetics: B-splines approximation."
427 Computer Methods in Applied Mechanics and Engineering (199) 1143-1152 */
429 public NURBSFiniteElement
430{
431protected:
438 mutable Vector u;
440 mutable Array <const KnotVector*> kv1;
441
442public:
443 /// Construct the NURBS_HCurl3DFiniteElement of order @a p
445 : VectorFiniteElement(3, Geometry::CUBE, 3*(p + 1)*(p + 2)*(p + 2), p,
448 shape_x(p + 1), shape_y(p + 1), shape_z(p + 1),
449 dshape_x(p + 1), dshape_y(p + 1), dshape_z(p + 1),
450 d2shape_x(p + 1), d2shape_y(p + 1), d2shape_z(p + 1),
451 shape1_x(p + 2), shape1_y(p + 2), shape1_z(p + 2),
452 dshape1_x(p + 2), dshape1_y(p + 2),dshape1_z(p + 2),
453 d2shape1_x(p + 2), d2shape1_y(p + 2), d2shape1_z(p + 2),
454 u(dof), du(dof,3)
455 {
456 orders[0] = orders[1] = orders[2] = p;
457 kv1.SetSize(dim);
458 kv1[0] = nullptr;
459 kv1[1] = nullptr;
460 kv1[2] = nullptr;
461 }
462
463 /// Construct the NURBS_HCurl3DFiniteElement with x-order @a px, y-order @a py and z-order @a pz
464 NURBS_HCurl3DFiniteElement(int px, int py, int pz)
465 : VectorFiniteElement(3, Geometry::CUBE,
466 (px + 1)*(py + 2)*(pz + 2) +
467 (px + 2)*(py + 1)*(pz + 2) +
468 (px + 2)*(py + 2)*(pz + 1),
469 std::max(std::max(px, py), pz), H_CURL, FunctionSpace::Qk),
471 shape_x(px + 1), shape_y(py + 1), shape_z(pz + 1),
472 dshape_x(px + 1), dshape_y(py + 1), dshape_z(pz + 1),
473 d2shape_x(px + 1), d2shape_y(py + 1), d2shape_z(pz + 1),
474 shape1_x(px + 2), shape1_y(py + 2), shape1_z(pz + 2),
475 dshape1_x(px + 2), dshape1_y(py + 2),dshape1_z(pz + 2),
476 d2shape1_x(px + 2), d2shape1_y(py + 2), d2shape1_z(pz + 2),
477 u(dof), du(dof,3)
478 {
479 orders[0] = px; orders[1] = py; orders[2] = pz;
480 kv1.SetSize(dim);
481 kv1[0] = nullptr;
482 kv1[1] = nullptr;
483 kv1[2] = nullptr;
484 }
485
486 void SetOrder() const override;
487
488 void CalcVShape(const IntegrationPoint &ip,
489 DenseMatrix &shape) const override;
490
491 /** @brief Evaluate the values of all shape functions of a *vector* finite
492 element in physical space at the point described by @a Trans. */
493 /** Each row of the result DenseMatrix @a shape contains the components of
494 one vector shape function. The size (#dof x SDim) of @a shape must be set
495 in advance, where SDim >= #dim is the physical space dimension as
496 described by @a Trans. */
498 DenseMatrix &shape) const override;
499
500 /** @brief Evaluate the curl of all shape functions of a *vector* finite
501 element in reference space at the given point @a ip. */
502 /** Each row of the result DenseMatrix @a curl_shape contains the components
503 of the curl of one vector shape function. The size (#dof x CDim) of
504 @a curl_shape must be set in advance, where CDim = 3 for #dim = 3 and
505 CDim = 1 for #dim = 2. */
506 void CalcCurlShape(const IntegrationPoint &ip,
507 DenseMatrix &curl_shape) const override;
508
510};
511
512} // namespace mfem
513
514#endif
Data type dense matrix using column-major storage.
Definition densemat.hpp:24
void SetSize(int s)
Change the size of the DenseMatrix to s x s.
Definition densemat.hpp:108
int dof
Number of degrees of freedom.
Definition fe_base.hpp:253
int orders[Geometry::MaxDim]
Anisotropic orders.
Definition fe_base.hpp:255
int dim
Dimension of reference space.
Definition fe_base.hpp:246
Describes the function space on each element.
Definition fe_base.hpp:226
Class for integration point with weight.
Definition intrules.hpp:35
An arbitrary order 1D NURBS element on a segment.
Definition fe_nurbs.hpp:72
void CalcShape(const IntegrationPoint &ip, Vector &shape) const override
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition fe_nurbs.cpp:31
NURBS1DFiniteElement(int p)
Construct the NURBS1DFiniteElement of order p.
Definition fe_nurbs.hpp:78
void SetOrder() const override
Definition fe_nurbs.cpp:22
void CalcHessian(const IntegrationPoint &ip, DenseMatrix &hessian) const override
Evaluate the Hessians of all shape functions of a scalar finite element in reference space at the giv...
Definition fe_nurbs.cpp:64
void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const override
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition fe_nurbs.cpp:45
An arbitrary order 2D NURBS element on a square.
Definition fe_nurbs.hpp:94
void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const override
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition fe_nurbs.cpp:125
void SetOrder() const override
Definition fe_nurbs.cpp:88
NURBS2DFiniteElement(int px, int py)
Construct the NURBS2DFiniteElement with x-order px and y-order py.
Definition fe_nurbs.hpp:110
void CalcHessian(const IntegrationPoint &ip, DenseMatrix &hessian) const override
Evaluate the Hessians of all shape functions of a scalar finite element in reference space at the giv...
Definition fe_nurbs.cpp:160
void CalcShape(const IntegrationPoint &ip, Vector &shape) const override
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition fe_nurbs.cpp:106
NURBS2DFiniteElement(int p)
Construct the NURBS2DFiniteElement of order p.
Definition fe_nurbs.hpp:101
An arbitrary order 3D NURBS element on a cube.
Definition fe_nurbs.hpp:129
void SetOrder() const override
Definition fe_nurbs.cpp:219
NURBS3DFiniteElement(int px, int py, int pz)
Definition fe_nurbs.hpp:149
void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const override
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Definition fe_nurbs.cpp:267
void CalcHessian(const IntegrationPoint &ip, DenseMatrix &hessian) const override
Evaluate the Hessians of all shape functions of a scalar finite element in reference space at the giv...
Definition fe_nurbs.cpp:313
void CalcShape(const IntegrationPoint &ip, Vector &shape) const override
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
Definition fe_nurbs.cpp:243
NURBS3DFiniteElement(int p)
Construct the NURBS3DFiniteElement of order p.
Definition fe_nurbs.hpp:138
An arbitrary order and dimension NURBS element.
Definition fe_nurbs.hpp:24
void Reset() const
Resets the patch and element data stored in the element.
Definition fe_nurbs.hpp:43
Array< const KnotVector * > kv
Definition fe_nurbs.hpp:26
Array< const KnotVector * > & KnotVectors() const
Get the KnotVectors.
Definition fe_nurbs.hpp:55
virtual void SetOrder() const
Definition fe_nurbs.hpp:61
void SetPatch(int p) const
Set which patch should be evaluated.
Definition fe_nurbs.hpp:49
Vector & Weights() const
Get the Weights.
Definition fe_nurbs.hpp:57
int GetPatch() const
Get which patch is currently considered.
Definition fe_nurbs.hpp:47
NURBSFiniteElement(int dim)
Construct NURBSFiniteElement with given.
Definition fe_nurbs.hpp:35
void SetElement(int e) const
Get which element is currently considered.
Definition fe_nurbs.hpp:53
int GetElement() const
Set which element should be evaluated.
Definition fe_nurbs.hpp:51
const int * GetIJK() const
Definition fe_nurbs.hpp:65
void SetIJK(const int *IJK) const
Set which IJK in patch should be evaluated.
Definition fe_nurbs.hpp:45
void CalcCurlShape(const IntegrationPoint &ip, DenseMatrix &curl_shape) const override
Evaluate the curl of all shape functions of a vector finite element in reference space at the given p...
Definition fe_nurbs.cpp:791
Array< const KnotVector * > kv1
Definition fe_nurbs.hpp:357
NURBS_HCurl2DFiniteElement(int p)
Construct the NURBS_HCurl2DFiniteElement of order p.
Definition fe_nurbs.hpp:361
void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const override
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition fe_nurbs.cpp:743
void SetOrder() const override
Definition fe_nurbs.cpp:706
NURBS_HCurl2DFiniteElement(int px, int py)
Construct the NURBS_HCurl2DFiniteElement with x-order px and y-order py.
Definition fe_nurbs.hpp:378
void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const override
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition fe_nurbs.cpp:874
NURBS_HCurl3DFiniteElement(int p)
Construct the NURBS_HCurl3DFiniteElement of order p.
Definition fe_nurbs.hpp:444
void SetOrder() const override
Definition fe_nurbs.cpp:827
NURBS_HCurl3DFiniteElement(int px, int py, int pz)
Construct the NURBS_HCurl3DFiniteElement with x-order px, y-order py and z-order pz.
Definition fe_nurbs.hpp:464
void CalcCurlShape(const IntegrationPoint &ip, DenseMatrix &curl_shape) const override
Evaluate the curl of all shape functions of a vector finite element in reference space at the given p...
Definition fe_nurbs.cpp:946
Array< const KnotVector * > kv1
Definition fe_nurbs.hpp:440
void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const override
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition fe_nurbs.cpp:442
NURBS_HDiv2DFiniteElement(int p)
Construct the NURBS_HDiv2DFiniteElement of order p.
Definition fe_nurbs.hpp:190
void CalcDivShape(const IntegrationPoint &ip, Vector &divshape) const override
Evaluate the divergence of all shape functions of a vector finite element in reference space at the g...
Definition fe_nurbs.cpp:491
void SetOrder() const override
Definition fe_nurbs.cpp:405
NURBS_HDiv2DFiniteElement(int px, int py)
Construct the NURBS_HDiv2DFiniteElement with x-order px and y-order py.
Definition fe_nurbs.hpp:207
Array< const KnotVector * > kv1
Definition fe_nurbs.hpp:186
void SetOrder() const override
Definition fe_nurbs.cpp:527
NURBS_HDiv3DFiniteElement(int px, int py, int pz)
Construct the NURBS_HDiv3DFiniteElement with x-order px, y-order py and z-order pz.
Definition fe_nurbs.hpp:296
Array< const KnotVector * > kv1
Definition fe_nurbs.hpp:272
void CalcDivShape(const IntegrationPoint &ip, Vector &divshape) const override
Evaluate the divergence of all shape functions of a vector finite element in reference space at the g...
Definition fe_nurbs.cpp:647
NURBS_HDiv3DFiniteElement(int p)
Construct the NURBS_HDiv3DFiniteElement of order p.
Definition fe_nurbs.hpp:276
void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const override
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
Definition fe_nurbs.cpp:574
Class for finite elements with basis functions that return scalar values.
Definition fe_base.hpp:662
Intermediate class for finite elements whose basis functions return vector values.
Definition fe_base.hpp:813
Vector data type.
Definition vector.hpp:82
int dim
Definition ex24.cpp:53
real_t p(const Vector &x, real_t t)