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 :
- Introduction — nature du modèle, éléments et degrés de liberté.
- Équations continues résolues — forme forte (et faible) du problème.
- Forme discrétisée — opérateurs discrets (
B,N) et expressions des matrices élémentaires (K, masse/capacité, tangente…). - Variables et matériau — noms primal/dual, composantes matériau,
comportement (
COMP) et, le cas échéant, état interne. - Mise en donnée (Rust, testé) — exemple Rust exécuté via
{{#include}}. - Exemple Python — l’équivalent haut niveau.
- 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.
- Conduction thermique —
-∇·(k∇T) = 0, l’exemple canonique, la conduction orientée (tenseurK) et la convection de surface (Robin / film,q·n = h(T − T_ext)), plus le rayonnement à l’infini (q·n = σε(T⁴ − T_∞⁴), non linéaire, à tangente cohérente). - Diffusion (loi de Fick) —
∇·(D∇c) = 0, concentrationc_<espèce>et flux de matièrej_<espèce>, l’espèce étant nommée à la construction ; même opérateur que la conduction, nature distincte. Avec le transfert d’interfacej·n = h(c₁ − c₂), qui laisse le champ sauter entre deux corps. - Échanges (frontière et interface) — la loi
h(a − b), partagée par l’échange avec une ambiante et le transfert entre deux maillages : une seule loi, dont la seule différence est que l’autre côté soit une donnée ou une inconnue. Générique en composantes, donc aussi bien un film thermique qu’une fondation élastique. - Mécanique — barre, élasticité linéaire, poutres et
portiques :
- Barre / treillis
- Élasticité linéaire
- Élasticité orthotrope et anisotrope
- Plasticité parfaite (von Mises)
- Lois d’écoulement plastique — écrouissage isotrope, Drucker-Prager, Ottosen
- Fluage et viscoplasticité — Norton, Lemaitre, Blackburn, Chaboche et sa variante endommageable
- Endommagement de Mazars
- Lois d’endommagement — Damage TC, SiC/SiC orthotrope, plasticité poreuse de Gurson
- Poutre d’Euler-Bernoulli — 1-D, plan, spatial ; exacte aux nœuds
- Poutre de Timoshenko
- Portique 2D
- Cadre 3D
- Coques — Reissner-Mindlin ou Kirchhoff discret, six DDL par nœud
- Contraintes — conditions limites imposées par multiplicateurs de Lagrange :
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")
| Physique | tangent | geometric | mass | Comportement (COMP) | Particularité de calcul |
|---|---|---|---|---|---|
heat_conductionisotropic orthotropic anisotropic | — | — | capacité ρ·cp | flux K·∇T | Symé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_transfercomposantes libres | — | — | — | h·a | Aveugle à 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. |
radiation | analytique4σε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")
| Physique | tangent | geometric | mass | Comportement (COMP) | Particularité de calcul |
|---|---|---|---|---|---|
fickisotropic orthotropic anisotropic | — | — | stockage poro | flux D·∇c | Mê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_transfercomposantes 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")
| Physique | tangent | geometric | mass | Comportement (COMP) | Particularité de calcul |
|---|---|---|---|---|---|
elasticityplane_stress plane_strain axisymmetric full_3d · isotropic orthotropic anisotropic | analytique c’est K | oui | oui | σ = 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 loisperfect isotropic drucker_prager ottosen gurson creep_norton creep_blackburn creep_lemaitre viscoplastic_chaboche viscoplastic_lemaitre_chaboche | analytique ×2 perturbation ×8 | oui | oui | σ, ε_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 loismazars damage_tc sic_sic | aucune | oui | oui | σ, 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")
| Physique | tangent | geometric | mass | Comportement (COMP) | Particularité de calcul |
|---|---|---|---|---|---|
truss | — | oui N/L·P | oui ρA | N = 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. |
bernoulliaucun tag | — | oui¹ | oui | MN, MN, 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. |
timoshenkoaucun tag | — | oui¹ | oui | M, VN, M, VN, 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. |
shellthick, kirchhoff | — | — | — | N_xx…N_xyM_xx…M_xyM_drillQ_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")
| Physique | tangent | geometric | mass | Comportement (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.
| voie | lois |
|---|---|
| analytique | perfect, isotropic (le module algorithmique J2) |
| par perturbation | drucker_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.