5. Construction of the matrix system#
We will now present the various ingredients leading to the construction of the matrix system that will solve the problem.
5.1. New notation (Voigt notation)#
In order to fully understand the construction of discrete terms in the finite element method, we will use a more compact notation:
\(\langle V\rangle\) is a line vector
\(\left\{V\right\}\) is a column vector
\(\left[A\right]\) is a matrix
Thus geometric interpolation is written according to the three dimensions of space:
Or even more compactly in vector form:
With the \(N\) matrix of shape functions. By considering an element with two nodes, we obtain in expanded form:
5.2. Discretized system#
In the hyperelastic case, we place ourselves in small deformations, the mechanical problem to be solved is written in a more compact way:
With \(a(u,\tilde{u})\) a bilinear, symmetric form that represents the potential energy of the structure and \(l(\tilde{u})\) the potential [1] volume and surface forces:
Discretization consists in choosing a base from space \({\Omega }^{h}\) and numerically calculating the terms of the matrix \(A\) and the vector \(L\). To do this, we express the bilinear form \(a(\mathrm{.},\mathrm{.})\) and the linear form \(l(\mathrm{.})\) as a sum over elements, defined by division of the base domain:
The terms \({A}_{\mathrm{ij}}\), which represent the interaction between two degrees of freedom \(i\) and \(j\), are constructed by assembling (the operation noted \(\sum _{\text{éléments}{\Omega }^{e}}(\mathrm{...})\)) the contributions coming from each of the elements that contain the corresponding nodes; we proceed in the same way to build the second member vector \({L}_{i}\). These contributions, called elementary terms, are calculated during a loop over the elements and only depend on the variables of element \({\Omega }^{e}\):
The relationship between the Cauchy stress tensor \(\sigma\) and the displacements \(u\) is given by the behavioral relationship, and is independent of the writing of the variational formulation. In the elastic case, we have:
\({\Lambda }_{\mathrm{ijkl}}\) is Hooke’s elasticity tensor. This tensor form is not very practical; the Voigt notation is preferentially used, which makes it possible to write:
In Cartesian coordinates, we have:
And a modified form of the deformation components to allow the contracted product to be expressed, i.e.:
Important note:
In the integration of laws of behavior, the stress shear and deformation components used by Code_Aster*are:*
\(\mathrm{\langle }\sigma \mathrm{\rangle }\mathrm{=}\langle \begin{array}{cccccc}{\sigma }_{\mathit{xx}}& {\sigma }_{\mathit{yy}}& {\sigma }_{\mathit{zz}}& \sqrt{2}\mathrm{.}{\sigma }_{\mathit{xy}}& \sqrt{2}\mathrm{.}{\sigma }_{\mathit{xz}}& \sqrt{2}\mathrm{.}{\sigma }_{\mathit{yz}}\end{array}\rangle\)
\(\mathrm{\langle }\varepsilon \mathrm{\rangle }\mathrm{=}\langle \begin{array}{cccccc}{\varepsilon }_{\mathit{xx}}& {\varepsilon }_{\mathit{yy}}& {\varepsilon }_{\mathit{zz}}& \sqrt{2}\mathrm{.}{\varepsilon }_{\mathit{xy}}& \sqrt{2}\mathrm{.}{\varepsilon }_{\mathit{xz}}& \sqrt{2}\mathrm{.}{\varepsilon }_{\mathit{yz}}\end{array}\rangle\)
The product of these two vectors gives the same result as the double contracted product ( ) .
With this new notation, we have in elasticity:
We start from the EF writing of the travel field:
And, similarly, the field of virtual travel:
For the sake of simplifying the notations, the reference to the element will be omitted. It is necessary to express the tensor of the deformations (virtual or real):
For the matrix relating to the bilinear form, we then obtain:
The matrices \(\left[B\right]\) and \([\Lambda ]\) contain the possible non-linearity of the behavior and will depend on the displacements:
\(\left[B\right]\) is a function of movements if we are in the situation of large deformations or large transformations (large rotations and/or large displacements).
\([\Lambda ]\) is the behavior matrix. It becomes dependent on displacements (and other variables) in the case of non-linear and/or non-elastic behaviors.
In these two cases, the process of solving the equations will involve a specific treatment (most often, a linearization of the Newton-Raphson type). In a similar manner, the elementary form will easily be obtained for the second member.
5.3. Calculation of elementary terms#
The basic terms to be calculated are of the form:
Three types of operations are to be performed:
the transformation of derivatives with respect to \(x\) into derivatives with respect to \(\xi\);
the transition from integration on the real element to integration on the reference element,
the numerical realization of this integration which is generally done by a quadrature formula.
5.3.1. Transformation of derivatives#
The transformation of derivatives is carried out using the Jacobian matrix \(J\), according to the chain rule of derivation:
where \({u}_{\alpha }^{\text{nod}}\) is the vector of the nodal values of the \(\alpha\) component of the displacement.
5.3.2. Change of integration domain#
The transition to integration on the reference element is carried out by multiplying the integrand by the determinant of the Jacobian matrix, called Jacobian:
The transition from the reference element to the real element implies the bijectivity of the \(\tau\) transformation. We must therefore \(\text{det}(J(\xi ))\ne 0\), which implies that the element must not turn around or degenerate (for example, the quadrangle must not degenerate into a triangle).
5.3.3. Digital integration#
5.3.3.1. In some particular cases, integrals can be calculated analytically. For example, for a triangle in two dimensions, the Jacobian is constant on the triangle, and the integrands are reduced to monomials that we know how to integrate exactly thanks to the numerical integration formula known as « Gauss » [2]#
However, these particular cases are rare, and integrals are preferred to be evaluated numerically using quadrature formulas. These give an approximation of the integral in the form of a weighted sum of the values of the integrand at a certain number of points in the element called integration points:
Scalars \({\omega }_{g}\) are called integration weights, and coordinates \({\xi }_{g}\) are the coordinates of the \(r\) integration points in the reference element.
In Gauss integration methods, integration points and weights are determined in such a way as to exactly integrate polynomials of a given order. This type of method is used in Code_Aster, the integration points are then called Gauss points.
The number of Gauss points chosen makes it possible to integrate exactly into the reference element. In fact, because of the possible non-linearity of the geometric transformation or the spatial dependence of the coefficients (for example for deformed or second-order elements), the integration is not exact in the real element.
For each element \({\Omega }_{e}\), we were able to calculate the so-called elementary terms: elementary matrix \({\mathrm{A}}^{\mathrm{e}}\) and elementary vector \({L}^{e}\). The matrix \(A\) and the vector \(L\) are obtained by a procedure called the assembly of elementary terms.
If we go back to the elementary form of stiffness:
Digital integration involves evaluating the constraints and deformations at the integration points:
This means that the constraints and deformations are the most exact (or the least false) at the integration points (fields called « ELGA » in Code_Aster). Simply extrapolating these values to the nodes for display introduces an error. In fact, it is a method for evaluating error, called the Zhu-Zienkiewicz error indicator.
In 2D elasticity, a triangle exhibiting a constant Jacobian, a single Gauss point is sufficient to exactly integrate the terms of the matrix and the second member (if it is constant).
The calculation cost increases with the number of integration points, especially for non-linear laws of behavior. For example, a hexahedron with 27 knots needs 27 Gauss points to integrate quantities. It therefore often happens that we « under-integrate », that is to say that we use fewer integration points than the minimum required, thus making an error that will eventually be compensated for by a finer mesh. In addition to this systematic error, this under-integration must be done carefully because it can produce matrix rank defects and thus make the linear system non-invertible.