IFEM 90A354
FiniteElement.h
Go to the documentation of this file.
1// $Id$
2//==============================================================================
12//==============================================================================
13
14#ifndef _FINITE_ELEMENT_H
15#define _FINITE_ELEMENT_H
16
17#include "BasisFunctionVals.h"
18#include "ItgPoint.h"
19#include "MatVec.h"
20#include "Vec3.h"
21#include "Tensor.h"
22
23
28class FiniteElement : public ItgPoint
29{
30public:
32 explicit FiniteElement(size_t n = 0, size_t i = 0) : ItgPoint(i), N(n), Te(3)
33 { p = q = r = 0; age = h = 0.0; detJxW = 1.0; }
34
36 virtual size_t getNoBasis() const { return 1; }
37
39 virtual const Vector& basis(char) const { return N; }
41 virtual Vector& basis(char) { return N; }
42
44 virtual const Matrix& grad(char) const { return dNdX; }
46 virtual const Matrix3D& hess(char) const { return d2NdX2; }
48 virtual const Matrix4D& hess2(char) const { return d3NdX3; }
49
50protected:
52 virtual Matrix& grad(char) { return dNdX; }
54 virtual Matrix3D& hess(char) { return d2NdX2; }
55
57 virtual std::ostream& write(std::ostream& os) const;
58
60 friend std::ostream& operator<<(std::ostream& os, const FiniteElement& fe)
61 {
62 return fe.write(os);
63 }
64
65public:
66 // Gauss point quantities
67 double detJxW;
74
83
94
95 // Element quantities
96 short int p;
97 short int q;
98 short int r;
99 double age;
100 double h;
105 std::vector<Tensor> Tn;
107};
108
109
115{
116public:
118 explicit MxFiniteElement(const std::vector<size_t>& n, size_t ip = 0);
119
121 size_t getNoBasis() const override { return 1+M.size(); }
122
124 const Vector& basis(char b) const override { return b < 2 ? N : M[b-2]; }
126 Vector& basis(char b) override { return b < 2 ? N : M[b-2]; }
127
129 const Matrix& grad(char b) const override { return b < 2 ? dNdX : dMdX[b-2]; }
131 const Matrix3D& hess(char b) const override { return b < 2 ? d2NdX2 : d2MdX2[b-2]; }
133 const Matrix4D& hess2(char b) const override { return b < 2 ? d3NdX3 : d3MdX3[b-2]; }
134
140 bool Jacobian(Matrix& Jac, const Matrix& Xnod,
141 unsigned short int gBasis,
142 const BasisValuesPtrs& bfs);
143
154 bool Jacobian(Matrix& Jac, Vec3& n, const Matrix& Xnod,
155 unsigned short int gBasis,
156 const BasisValuesPtrs& bfs,
157 size_t t1, size_t t2, size_t nBasis = 0,
158 const Matrix* Xnod2 = nullptr);
159
166 bool Hessian(Matrix3D& Hess, const Matrix& Jac, const Matrix& Xnod,
167 unsigned short int gBasis,
168 const BasisValuesPtrs& bfs);
169
175 void piolaMapping (const double detJ,
176 const Matrix& Ji,
177 const Matrix& Xnod,
178 const BasisValuesPtrs& bfs);
179
183 void piolaBasis(const double detJ, const Matrix& J);
184
185protected:
192 void piolaGradient(const double detJ, const Matrix& J, const Matrix& Ji,
193 const Matrix& Xnod, const BasisValuesPtrs& bfs);
194
196 Matrix& grad(char b) override { return b < 2 ? dNdX : dMdX[b-2]; }
198 Matrix3D& hess(char b) override { return b < 2 ? d2NdX2 : d2MdX2[b-2]; }
199
201 std::ostream& write(std::ostream& os) const override;
202
203private:
204 std::vector<Vector> M;
205 std::vector<Matrix> dMdX;
206 std::vector<Matrix3D> d2MdX2;
207 std::vector<Matrix4D> d3MdX3;
208};
209
210#endif
Basis function values container.
std::vector< const BasisFunctionVals * > BasisValuesPtrs
Convenience type alias.
Definition BasisFunctionVals.h:34
Integration point representation.
Global algebraic operations on index 1-based matrices and vectors.
Representation of second-order tensors with some basic operations.
Representation of a point in 3D space with some basic operations.
std::vector< Vec3 > Vec3Vec
An array of point vectors.
Definition Vec3.h:318
Class representing a finite element.
Definition FiniteElement.h:29
Vector N
Basis function values.
Definition FiniteElement.h:68
Matrix3D d2NdX2
Second derivatives of the basis functions.
Definition FiniteElement.h:70
Vec3Vec En
Array of nodal eccentricity vectors.
Definition FiniteElement.h:106
virtual Matrix & grad(char)
Returns a reference to the basis function derivatives.
Definition FiniteElement.h:52
short int q
Polynomial order of the basis in v-direction.
Definition FiniteElement.h:97
friend std::ostream & operator<<(std::ostream &os, const FiniteElement &fe)
Global output stream operator.
Definition FiniteElement.h:60
Tensor Te
Local-to-global element transformation matrix.
Definition FiniteElement.h:104
Vec3Vec XC
Array with element corner coordinate vectors.
Definition FiniteElement.h:101
virtual size_t getNoBasis() const
Returns the number of bases.
Definition FiniteElement.h:36
virtual const Matrix3D & hess(char) const
Returns a const reference to the basis function 2nd-derivatives.
Definition FiniteElement.h:46
Vector Navg
Volume-averaged basis function values.
Definition FiniteElement.h:102
short int r
Polynomial order of the basis in r-direction.
Definition FiniteElement.h:98
double detJxW
Weighted determinant of the coordinate mapping.
Definition FiniteElement.h:67
virtual const Matrix & grad(char) const
Returns a const reference to the basis function derivatives.
Definition FiniteElement.h:44
Matrix G
Covariant basis / Matrix used for stabilized methods.
Definition FiniteElement.h:72
Matrix dNdX
First derivatives (gradient) of the basis functions.
Definition FiniteElement.h:69
Matrix P
Matrix holding Piola-mapped basis function values.
Definition FiniteElement.h:82
virtual Matrix3D & hess(char)
Returns a reference to the basis function 2nd-derivatives.
Definition FiniteElement.h:54
short int p
Polynomial order of the basis in u-direction.
Definition FiniteElement.h:96
double age
Time since birth of this element.
Definition FiniteElement.h:99
virtual const Vector & basis(char) const
Returns a const reference to the basis function values.
Definition FiniteElement.h:39
FiniteElement(size_t n=0, size_t i=0)
Default constructor.
Definition FiniteElement.h:32
Matrix dPdX
Matrix holding Piola-mapped basis derivatives.
Definition FiniteElement.h:93
virtual std::ostream & write(std::ostream &os) const
Writes the finite element object to the given output stream.
Definition FiniteElement.C:20
double h
Characteristic element size/diameter.
Definition FiniteElement.h:100
virtual const Matrix4D & hess2(char) const
Returns a const reference to the basis function 3nd-derivatives.
Definition FiniteElement.h:48
Matrix Xn
Matrix of element nodal coordinates.
Definition FiniteElement.h:103
Matrix H
Hessian.
Definition FiniteElement.h:73
std::vector< Tensor > Tn
Array of element nodal rotation matrices.
Definition FiniteElement.h:105
virtual Vector & basis(char)
Returns a reference to the basis function values.
Definition FiniteElement.h:41
Matrix4D d3NdX3
Third derivatives of the basis functions.
Definition FiniteElement.h:71
Class representing an integration point.
Definition ItgPoint.h:25
Class representing a mixed finite element.
Definition FiniteElement.h:115
std::vector< Matrix > dMdX
First derivatives of the basis functions.
Definition FiniteElement.h:205
std::vector< Matrix4D > d3MdX3
Third derivatives of the basis functions.
Definition FiniteElement.h:207
bool Jacobian(Matrix &Jac, const Matrix &Xnod, unsigned short int gBasis, const BasisValuesPtrs &bfs)
Sets up the Jacobian matrix of the coordinate mapping.
Definition FiniteElement.C:82
const Vector & basis(char b) const override
Returns a const reference to the basis function values.
Definition FiniteElement.h:124
std::ostream & write(std::ostream &os) const override
Writes the finite element object to the given output stream.
Definition FiniteElement.C:61
const Matrix3D & hess(char b) const override
Returns a const reference to the basis function 2nd-derivatives.
Definition FiniteElement.h:131
Matrix3D & hess(char b) override
Returns a reference to the basis function 2nd-derivatives.
Definition FiniteElement.h:198
const Matrix4D & hess2(char b) const override
Returns a const reference to the basis function 3rd-derivatives.
Definition FiniteElement.h:133
size_t getNoBasis() const override
Returns the number of bases.
Definition FiniteElement.h:121
void piolaGradient(const double detJ, const Matrix &J, const Matrix &Ji, const Matrix &Xnod, const BasisValuesPtrs &bfs)
Calculates the Piola derivatives.
Definition FiniteElement.C:208
const Matrix & grad(char b) const override
Returns a const reference to the basis function derivatives.
Definition FiniteElement.h:129
std::vector< Vector > M
Basis function values.
Definition FiniteElement.h:204
Vector & basis(char b) override
Returns a reference to the basis function values.
Definition FiniteElement.h:126
Matrix & grad(char b) override
Returns a reference to the basis function derivatives.
Definition FiniteElement.h:196
bool Hessian(Matrix3D &Hess, const Matrix &Jac, const Matrix &Xnod, unsigned short int gBasis, const BasisValuesPtrs &bfs)
Sets up the Hessian matrix of the coordinate mapping.
Definition FiniteElement.C:156
void piolaBasis(const double detJ, const Matrix &J)
Calculates the Piola basis functions.
Definition FiniteElement.C:192
std::vector< Matrix3D > d2MdX2
Second derivatives of the basis functions.
Definition FiniteElement.h:206
void piolaMapping(const double detJ, const Matrix &Ji, const Matrix &Xnod, const BasisValuesPtrs &bfs)
Calculates the Piola basis functions and their derivatives.
Definition FiniteElement.C:180
Simple class for representing a non-symmetric second-order tensor.
Definition Tensor.h:28
Simple class for representing a point in 3D space.
Definition Vec3.h:27
A vector class with some added algebraic operations.
Definition matrix.h:64