Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

TRI3 — triangle linéaire

En bref

Le triangle à trois nœuds, l’élément 2-D le plus simple : son interpolation est affine, et un gradient y est constant. Plongé dans l’espace, il décrit une surface : une coque, la peau d’un volume.

nom"TRI3"
nœuds3, aux sommets
interpolation"LAGRANGE1" : affine
dimension2 ; dans des Coords 2-D ou 3-D
bord3 SEG2
quadrature"GAUSS" : 3 points, degré 2 ; "REDUCED" : 1 point
version quadratiqueTRI6
obtenu partriangulate_surface, sweep, transfinite ; convert d’un QUA4 ; skin d’un TET4, PYRA5 ou PENTA6

Élément de référence

Le triangle \( \xi, \eta \ge 0 \), \( \xi + \eta \le 1 \), parcouru dans le sens trigonométrique.

Nœud\( (\xi, \eta) \)
0\( (0, 0) \)
1\( (1, 0) \)
2\( (0, 1) \)

Fonctions de forme

Les coordonnées barycentriques du point :

\[ N_0 = 1 - \xi - \eta, \qquad N_1 = \xi, \qquad N_2 = \eta. \]

Dérivées de référence

Constantes :

\[ \nabla_\xi N_0 = (-1, -1), \qquad \nabla_\xi N_1 = (1, 0), \qquad \nabla_\xi N_2 = (0, 1). \]

Le jacobien est donc constant sur la maille, comme le gradient d’un champ et la déformation d’un solide.

Degrés de liberté

physiqueinconnues par nœudpar maille
conduction, diffusionT3
élasticité plane ou axisymétriqueu_x, u_y6
coque, dans l’espaceu_x, u_y, u_z, r_x, r_y, r_z18
échanges, rayonnement, sur la face d’un volumeT3

Quadrature

"GAUSS" : règle de Hammer à 3 points, aux milieux des côtés, exacte au degré 2.

\[ \xi_g \in \left\{ \left(\tfrac12, 0\right), \left(\tfrac12, \tfrac12\right), \left(0, \tfrac12\right) \right\}, \qquad w_g = \tfrac{1}{6}, \qquad \sum_g w_g = \tfrac12. \]

Un point suffirait à la raideur, de degré 0 ; la masse \( \int N_i N_j \), de degré 2, en demande trois.

"REDUCED" : un point au centre de gravité \( (\tfrac13, \tfrac13) \), de poids \( \tfrac12 \).

Exemple

import pyrucast

# Les tables de référence d'un TRI3 : une zone vide suffit.
tri3 = pyrucast.FiniteElementSpace(pyrucast.Mesh(pyrucast.Coords(2), "TRI3"))[0]
print(tri3.nodes_per_cell, tri3.gauss_count)  # 3 3

# Le point 0, au milieu du côté (0, 1), de poids 1/6.
print(tri3.gauss_xi(0), round(tri3.gauss_weight(0), 6))  # [0.5, 0.0] 0.166667
# N = (1 − ξ − η, ξ, η) en ce point.
print(tri3.n_at_g(0))  # [0.5, 0.5, 0.0]
# Les dérivées, les mêmes en tout point : (−1, −1), (1, 0), (0, 1).
print(tri3.dn_at_g(0))  # [-1.0, -1.0, 1.0, 0.0, 0.0, 1.0]

Côté Rust

Tri3 (src/atoms/element_kind/tri3.rs) implémente ElementKind.