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

HEX8 — hexaèdre trilinéaire

En bref

L’hexaèdre à huit nœuds, pendant 3-D du QUA4. Son interpolation trilinéaire le rend bien meilleur en flexion qu’un TET4, mais il demande un maillage structuré, par extrusion ou par couches.

nom"HEX8"
nœuds8, aux sommets
interpolation"LAGRANGE1" : trilinéaire
dimension3 ; dans des Coords 3-D
bord6 QUA4
quadrature"GAUSS" : 2×2×2 points, degré 3 par direction ; "REDUCED" : 1 point
versions quadratiquesHEX20 (sérendipité), HEX27 (complet)
obtenu parextrude, revolve d’un QUA4 ; sweep_solid ; pave_volume

Élément de référence

Le cube \( \xi, \eta, \zeta \in [-1, +1]^3 \) : la face du bas (nœuds 0 à 3) puis celle du haut (nœuds 4 à 7), chacune dans le sens trigonométrique.

Nœud\( (\xi_i, \eta_i, \zeta_i) \)Nœud\( (\xi_i, \eta_i, \zeta_i) \)
0\( (-1,-1,-1) \)4\( (-1,-1,+1) \)
1\( (+1,-1,-1) \)5\( (+1,-1,+1) \)
2\( (+1,+1,-1) \)6\( (+1,+1,+1) \)
3\( (-1,+1,-1) \)7\( (-1,+1,+1) \)

Fonctions de forme

Pour le nœud \( i \) de coordonnées \( (\xi_i, \eta_i, \zeta_i) \) :

\[ N_i(\xi, \eta, \zeta) = \tfrac{1}{8}\,(1 + \xi_i\,\xi)\,(1 + \eta_i\,\eta)\,(1 + \zeta_i\,\zeta). \]

Dérivées de référence

\[ \frac{\partial N_i}{\partial \xi} = \tfrac18\,\xi_i\,(1 + \eta_i\,\eta)(1 + \zeta_i\,\zeta), \]

et de même en \( \eta \) et \( \zeta \).

Degrés de liberté

physiqueinconnues par nœudpar maille
conduction, diffusionT8
élasticité 3-Du_x, u_y, u_z24

Quadrature

"GAUSS" : produit 2×2×2 de Gauss-Legendre, exact au degré 3 par direction.

\[ \xi_g = \left(\pm\tfrac{1}{\sqrt 3}, \pm\tfrac{1}{\sqrt 3}, \pm\tfrac{1}{\sqrt 3}\right), \qquad w_g = 1, \qquad \sum_g w_g = 8. \]

La masse et la raideur d’un parallélépipède sont exactes ; celles d’un hexaèdre déformé, comme pour le QUA4, ne le sont plus.

"REDUCED" : un point au centre, de poids 8.

Exemple

import pyrucast

hex8 = pyrucast.FiniteElementSpace(pyrucast.Mesh(pyrucast.Coords(3), "HEX8"))[0]
print(hex8.nodes_per_cell, hex8.gauss_count)  # 8 8

# Le point 0 en (−1/√3, −1/√3, −1/√3), de poids 1.
print([round(x, 6) for x in hex8.gauss_xi(0)], hex8.gauss_weight(0))
# [-0.57735, -0.57735, -0.57735] 1.0
# Le nœud 0, le plus proche, et le nœud 6, à l'opposé.
n = hex8.n_at_g(0)
print(round(n[0], 6), round(n[6], 6))  # 0.490563 0.009437

Côté Rust

Hex8 (src/atoms/element_kind/hex8.rs) implémente ElementKind.