SEG2 — segment linéaire
En bref
Un segment à deux nœuds : une barre, une poutre, un fil conducteur, le bord d’une surface.
| nom | "SEG2" |
| nœuds | 2, aux extrémités |
| interpolation | "LAGRANGE1" : linéaire ; aussi "HERMITE3" et "MODEL_EMBEDDED" pour les poutres |
| dimension | 1 ; dans des Coords 1-D, 2-D ou 3-D |
| bord | ses deux extrémités |
| quadrature | "GAUSS" : 2 points, degré 3 ; "REDUCED" : 1 point |
| version quadratique | SEG3 |
| obtenu par | line, arc, circle ; border, le bord d’une surface TRI3 ou QUA4 |
Élément de référence
\( \xi \in [-1, +1] \).
| Nœud | \( \xi \) |
|---|---|
| 0 | \( -1 \) |
| 1 | \( +1 \) |
Fonctions de forme
\[ N_0(\xi) = \tfrac{1}{2}(1 - \xi), \qquad N_1(\xi) = \tfrac{1}{2}(1 + \xi). \]
Dans des Coords 2-D ou 3-D, le segment est plongé : sa longueur
s’obtient par la métrique \( \sqrt{J^{\mathsf T}J} \), et le gradient d’un
champ est le gradient le long du segment (voir Jacobien et grandeurs
physiques).
Dérivées de référence
Constantes :
\[ \frac{\partial N_0}{\partial \xi} = -\tfrac{1}{2}, \qquad \frac{\partial N_1}{\partial \xi} = +\tfrac{1}{2}. \]
Sur un segment de longueur \( L \), \( |J| = L/2 \) : un gradient constant le long du segment.
Degrés de liberté
| physique | inconnues par nœud | par maille |
|---|---|---|
| conduction, diffusion | T | 2 |
| échanges, rayonnement, sur le bord d’une surface | T | 2 |
| barre | u_x en 1-D ; u_x, u_y en plan ; u_x, u_y, u_z dans l’espace | 2, 4, 6 |
poutre de Bernoulli ("HERMITE3"), de Timoshenko ("MODEL_EMBEDDED") | w, theta en 1-D ; u_x, u_y, r_z en plan ; six dans l’espace | 4, 6, 12 |
Sous "HERMITE3", la flèche est interpolée par quatre fonctions cubiques, une
valeur et une pente par nœud. Sous "MODEL_EMBEDDED", la poutre porte ses
propres fonctions, et l’espace n’en tabule aucune pour le champ.
Quadrature
"GAUSS" : Gauss-Legendre à 2 points, exacte au degré 3.
\[ \xi_g = \pm\frac{1}{\sqrt 3}, \qquad w_g = 1, \qquad \sum_g w_g = 2. \]
La masse d’un segment droit,
\( \int N_i N_j\,ds = \tfrac{L}{6}\begin{bmatrix}2&1\\1&2\end{bmatrix} \),
est de degré 2 : intégrée exactement. Sous "HERMITE3", la raideur de flexion
l’est aussi : ses dérivées secondes sont linéaires, leur produit de degré 2.
"REDUCED" : un point en \( \xi = 0 \), de poids 2.
Exemple
import pyrucast
# Les tables de référence d'un SEG2 : une zone vide suffit.
seg2 = pyrucast.FiniteElementSpace(pyrucast.Mesh(pyrucast.Coords(1), "SEG2"))[0]
print(seg2.nodes_per_cell, seg2.gauss_count) # 2 2
# Les deux points en ∓1/√3, de poids 1.
print([round(seg2.gauss_xi(g)[0], 6) for g in range(2)]) # [-0.57735, 0.57735]
print([seg2.gauss_weight(g) for g in range(2)]) # [1.0, 1.0]
# N = ((1 − ξ)/2, (1 + ξ)/2) au premier point ; les dérivées, constantes.
print([round(v, 6) for v in seg2.n_at_g(0)]) # [0.788675, 0.211325]
print(seg2.dn_at_g(0)) # [-0.5, 0.5]
Côté Rust
Seg2 (src/atoms/element_kind/seg2.rs) implémente ElementKind. La base
d’Hermite vit à part, dans src/atoms/element_kind/hermite.rs : seul un
SEG2 l’accepte.