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

Détails des physiques

Chaque physique est une variante de SubModel : elle déclare ses variables (primales / duales), son matériau, et sait assembler sa rigidité K (et, le cas échéant, intégrer son comportement COMP). Le Model orchestre, mais ne porte aucune logique physique — voir Modèle physique pour la mécanique générique (DOFs, assemblage, chargements, solveur).

Chaque page suit le même plan standard, dans cet ordre :

  1. Introduction — nature du modèle, éléments et degrés de liberté.
  2. Équations continues résolues — forme forte (et faible) du problème.
  3. Forme discrétisée — opérateurs discrets (B, N) et expressions des matrices élémentaires (K, masse/capacité, tangente…).
  4. Variables et matériau — noms primal/dual, composantes matériau, comportement (COMP) et, le cas échéant, état interne.
  5. Mise en donnée (Rust, testé) — exemple Rust exécuté via {{#include}}.
  6. Exemple Python — l’équivalent haut niveau.
  7. Compléments (facultatif) — extensions propres au modèle (masse & rigidité géométrique, thermomécanique, convection, régime transitoire…).

Certaines physiques omettent une rubrique sans objet (p. ex. pas d’exemple Rust dédié pour un modèle piloté par le comportement) ; l’ordre reste identique.

Ce regroupement est la nature physique (Physics) que chaque variante déclare : Thermal (conduction), Radiation (rayonnement, en plus de Thermal), Diffusion (Fick), Mechanical (barre → cadre 3D) et Constraint (les contraintes de Lagrange). On sélectionne les sous-modèles d’une nature avec model.filter(Physics::Mechanical) (et les blocs d’une matrice avec k.filter(...)) — voir Nature physique et filtrage.

Ce que chacune sait produire

La liste ci-dessus dit où lire chaque physique. Les tableaux qui suivent disent ce qu’elle sait produire : les genres de matrice qu’elle déclare (MatrixKind), la voie par laquelle elle obtient sa tangente, la nature de son intégration de comportement, et la particularité de calcul qui la distingue.

Ils se lisent en colonnes. Une case remplie dit que la physique déclare ce terme et que l’assembleur l’appelle ; un tiret dit qu’elle n’y contribue rien — et ce n’est pas un manque. matrix.mass(...) sur un modèle contenant un échange de bord voit simplement qu’il n’a pas de masse.

Les tags donnés sous chaque nom sont les chaînes exactes que prennent les opérateurs (from_name) : c’est ce qu’on écrit, pas une paraphrase.

Thermique — primale T, duale q, filter("thermal")

PhysiquetangentgeometricmassComportement (COMP)Particularité de calcul
heat_conduction
isotropic orthotropic anisotropic
——capacité ρ·cpflux K·∇TSymétrie matériau iso / ortho / aniso. La conductivité isotrope est lue par point de Gauss — donc variable à l’intérieur d’une maille ; les constantes orientées le sont par maille.
boundary_transfer
composantes libres
———h·aAveugle à l’orientation du maillage de bord : la normale est déjà consommée en écrivant q·n = h(T − T_ext), et la mesure d’intégration est une magnitude.
radiationanalytique
4σεT³
——σε(T⁴ − T_∞⁴)Non linéaire. La rigidité est le film linéarisé autour de T_∞, donc constante : c’est l’opérateur dont part Newton. La tangente porte la vraie non-linéarité. Seule physique à déclarer deux natures, [Thermal, Radiation].

Diffusion — primale c_<espèce>, duale j_<espèce>, filter("diffusion")

PhysiquetangentgeometricmassComportement (COMP)Particularité de calcul
fick
isotropic orthotropic anisotropic
——stockage poroflux D·∇cMême opérateur que la conduction, nature distincte : partager un laplacien n’est pas partager une physique, et un problème couplé doit pouvoir sélectionner l’une sans l’autre. L’espèce est nommée à la construction et portée par chaque nom (c_H2, j_H2, D_H2), ce qui laisse deux espèces partager un maillage — mais pas par ce qui appartient au milieu (poro, les axes V1X…).
interface_transfer
composantes libres
———h·(c₁ − c₂)Quatre blocs — deux diagonaux, deux Coupling dont les lignes vivent sur un maillage et les colonnes sur l’autre. Leur scatter est séquentiel : le coloriage qui rend le scatter parallèle sûr repose sur une seule connectivité. Conformité vérifiée jusqu’au nœud.

Mécanique — milieux continus, primales u, duales f, filter("mechanical")

PhysiquetangentgeometricmassComportement (COMP)Particularité de calcul
elasticity
plane_stress plane_strain axisymmetric full_3d · isotropic orthotropic anisotropic
analytique
c’est K
ouiouiσ = D·εLoi linéaire, donc la tangente est la rigidité. Symétrie matériau iso/ortho/aniso : le repère d’orthotropie passe par des vecteurs du champ matériau, et la rotation du tenseur se fait à l’ordre 4 plutôt que par une matrice de Bond.
plasticity — 10 lois
perfect isotropic drucker_prager ottosen gurson creep_norton creep_blackburn creep_lemaitre viscoplastic_chaboche viscoplastic_lemaitre_chaboche
analytique ×2
perturbation ×8
ouiouiσ, ε_p, p
+ variables de la loi
La loi d’écoulement est un attribut. Tangente analytique pour les deux lois von Mises, par perturbation pour les huit autres — et toujours symétrisée. Les cinq lois visqueuses (Norton, Blackburn, Lemaitre, Chaboche…) erronent sans dt plutôt que d’intégrer comme si le temps n’existait pas.
damage — 3 lois
mazars damage_tc sic_sic
aucuneouiouiσ, damage
+ histoire de la loi
Pas de tangente, délibérément : l’opérateur d’itération reste la rigidité non endommagée. Damage TC porte deux histoires indépendantes — c’est ce qui laisse une fissure refermée reprendre toute sa charge, ce qu’un scalaire ne peut pas.

Mécanique — structurel, efforts de section, filter("mechanical")

PhysiquetangentgeometricmassComportement (COMP)Particularité de calcul
truss—oui N/L·Poui ρAN = E·A·εForme fermée globale : la direction vient des coordonnées, sans matrice de repère. Marche en 1-D, 2-D et 3-D sans changement.
bernoulli
aucun tag
—oui¹ouiM
N, M
N, M_y, M_z, T
Seule physique bâtie sur une interpolation C¹ : elle exige un espace HERMITE3, dont la base cubique la rend exacte aux nœuds — un élément par barre suffit. La configuration (1-D, plan, spatial) se déduit de la dimension du maillage. Ne demande ni G ni A_s : réclamer une constante qu’une théorie n’utilise pas, c’est inviter la mauvaise.
timoshenko
aucun tag
—oui¹ouiM, V
N, M, V
N, M_y, M_z, T, V_y, V_z
+ phi
Une physique pour les trois configurations, lues sur la dimension du maillage — elle remplace frame et frame3d. Élément exact (forme fermée en Φ = 12EI/G·A_s·L²), donc espace MODEL_EMBEDDED : la base dépend du matériau, aucun espace ne peut la tabuler. Seule physique à porter dans son état une grandeur qui n’est pas un effort : Φ lui-même, parce que son B en dépend et que le noyau de forces internes reçoit l’état, non le matériau. ¹ sauf en flexion pure, qui n’a pas d’effort axial.
shell
thick, kirchhoff
———N_xx…N_xy
M_xx…M_xy
M_drill
Q_xz, Q_yz (thick seul)
Six DDL par nœud, les mêmes que la poutre en configuration spatiale, donc coque et portique partagent des nœuds sans adaptateur. Le vrillage est lié à la rotation de membrane, pas pénalisé : une pénalité diagonale s’opposerait à une rotation rigide, qui ne coûte rien. Il travaille, donc il a un effort conjugué (M_drill) : un résidu qui l’omettrait serait faux du terme même qui désingularise l’élément. thick (Reissner-Mindlin) est multi-quadrature — membrane et flexion au Gauss complet, cisaillement transverse en intégration réduite, ce qui empêche le blocage. kirchhoff (DKT/DKQ) n’a aucun cisaillement : γ = 0 est imposé aux sommets et le long de chaque arête, la limite mince est donc exacte par construction et il ne reste rien à bloquer — mais aussi aucun Q de comportement, l’effort tranchant d’une plaque mince étant une réaction.

Contraintes — multiplicateurs de Lagrange, filter("constraint")

PhysiquetangentgeometricmassComportement (COMP)Particularité de calcul
flux————La seule physique dont le terme entier siège à droite du signe égal : sa dérivée est nulle, elle ne contribue à aucune matrice. Premier domaine sans comportement — elle intègre sur un espace EF et y lit sa densité phi_<dual>, sans loi à évaluer. Elle n’a pas de primale non plus : elle écrit dans la ligne duale d’une autre physique.
dirichlet · mpc · embedded · contact————Aucun layout, rien d’intégré sur une maille : elles redéfinissent directement contributions() et rendent leurs blocs C / Cᵀ en Literal. L’assembleur reste sans le moindre cas particulier « Dirichlet ».

« Par perturbation » veut dire différences centrées

Pour les huit lois qui n’ont pas de tangente en forme fermée, D_alg est obtenu en perturbant la déformation et en relançant le retour, composante par composante :

\[ D_{ij} \simeq \frac{\sigma_i(\varepsilon + h\,e_j) - \sigma_i(\varepsilon - h\,e_j)}{2h}, \qquad h = 10^{-6}\,\lVert \varepsilon \rVert_\infty . \]

Six composantes de Voigt, deux évaluations chacune : douze appels au retour par point de Gauss. Le pas doit rester bien au-dessus du bruit du retour (celui d’Ottosen ou de Gurson converge à une tolérance, pas exactement) et bien en dessous de l’échelle de courbure de la surface ; 1e-6·‖ε‖ tient confortablement entre les deux. Les colonnes de cisaillement sont divisées par deux en sortie, ce qui transforme ∂σ/∂ε_ij en ∂σ/∂γ_ij — la convention ingénieur du reste du dépôt.

voielois
analytiqueperfect, isotropic (le module algorithmique J2)
par perturbationdrucker_prager, ottosen, gurson, les trois fluages, les deux Chaboche

Le partage n’est pas une question de difficulté mais de vérifiabilité : seule la forme fermée de von Mises a été confrontée à une différence finie et validée. La dérivation analytique de Drucker-Prager, écrite d’abord, était fausse de 24 % — plausible, et fausse ; seul l’oracle numérique l’a dit. Une tangente obtenue par perturbation ne peut pas être mal dérivée, coûte douze évaluations d’une mise à jour bon marché, et laisse Newton converger. C’est un bon échange.

Le rayonnement, lui, a bien une tangente analytique (4σεT³ ∫NᵢNⱼ) : sa non-linéarité est une puissance scalaire d’une seule variable, pas une carte de projection.

Trois choses que ces tableaux ne disent pas

Les forces internes ne suivent pas toujours Bᵀσ. Le défaut est le noyau de la mécanique des milieux continus, f_i = ∫ ∂N_i/∂x · σ. Une physique dont la duale n’est pas un vecteur déplacement le redéfinit : la thermique et la diffusion appliquent Bᵀ à un flux scalaire, tandis que la convection, le rayonnement et le transfert d’interface pondèrent par N et non par Bᵀ — leur intégrande est une densité surfacique, pas une grandeur conjuguée d’un gradient.

Les structurels le redéfinissent aussi, pour une autre raison : leur B existe, mais ce n’est pas le gradient symétrique. Barre, poutres et coques intègrent chacun le transposé du leur — truss::internal_force_element, beam::internal_force_into, shell::b_into — et c’est le même B que leur rigidité, ce que mesure tests/internal_forces.rs : la loi structurelle étant linéaire, ∫ Bᵀσ vaut K·u exactement, à l’arrondi près.

Deux d’entre eux ont fallu payer un prix pour cela. Une poutre de Timoshenko porte Φ dans son état, son interpolation en dépendant. Une coque a gagné un effort conjugué, M_drill : le vrillage travaillait dans K sans figurer nulle part ailleurs.

La tangente est symétrisée. D_alg est réduit au triangle supérieur puis relu en miroir, un format qui ne peut structurellement pas porter une matrice non symétrique. Or un écoulement non associé — Drucker-Prager, dont la dilatance diffère du frottement — en a une. Elle est donc symétrisée, ce qui coûte à Newton son taux quadratique sur cette loi, et rien d’autre. Voir Lois d’écoulement plastique.

État absent ≠ état nul. Au-delà de ε_p et p, une loi déclare l’état qu’elle veut par internal_names() : la déformation primaire de Blackburn, la contrainte de rappel de Chaboche (un tenseur complet), la porosité de Gurson, les deux histoires de Damage TC. Le premier pas passe un vecteur vide — et non un vecteur de zéros — pour qu’une loi démarrant d’une constante matériau puisse faire la différence. Sans cela, un métal poreux démarrerait dense et ne s’endommagerait jamais.

Pour ajouter une physique, voir Ajouter une physique.