Détail des opérateurs
Les opérateurs sont les fonctions libres de pyrucast : elles croisent
des conteneurs (maillage + champ, espace EF + champ…) ou appartiennent à une
famille d’opérateurs, par opposition aux méthodes qui restent sur un seul
conteneur (cf. Conventions). Côté Rust elles vivent sous
src/ops/<module>, où le module porte le nom du conteneur produit ; côté
Python elles sont exposées dans le sous-module de même nom
(pyrucast.node_field.positions, pyrucast.matrix.stiffness, …).
Les chapitres qui suivent sont organisés par sujet, ce qui ne recoupe pas toujours le module d’implémentation — la colonne de gauche donne la correspondance.
| Module Rust | Chapitre | Contenu |
|---|---|---|
ops::mesh | Maillage | line, circle, arc, extrude, revolve, sweep, transfinite (DALL), sweep_solid, copy, translate, rotate, symmetry_point, symmetry_line, symmetry_plane, project_on_sphere, triangulate_surface, pave_surface, grid_surface, grid_surface2, triangulate_volume, pave_volume, regularize, cleanup, merge_triangles, border, skin, orient, invert, chain, elements_on, sélection de nœuds par région (points_in_sphere, points_on_plane, points_in_cylinder, points_on_cone, points_on_torus…), merge_nodes, read_gmsh, from_gmsh, from_medcoupling, from_arrays, poi1_from_nodes, from_live_nodes, to_poi1, to_quadratic, convert, barycenter, mesh.consolidate… |
ops::model | Modèle | les déclarations de physique : heat_conduction, fick, radiation, boundary_transfer, interface_transfer, elasticity, plasticity_perfect et les lois d’écoulement, mazars et les lois d’endommagement, truss, bernoulli, timoshenko, shell, et les contraintes dirichlet, mpc, embedded, contact |
ops::element_field | Construction | champs matériau (material_field…) |
ops::coords | Champs | set, displace, displace_from (configuration X + u posée en absolu, FORM) — les trois seuls opérateurs qui écrivent la géométrie ; in_config (calculer le temps d’un bloc dans une autre configuration) |
ops::evolution | Évolution | along (un champ relevé le long d’une ligne de points, une courbe par composante) |
ops::measure | Champs | integral / integral_element (∫ f dΩ), xtx / xty (produits scalaires globaux) |
ops::geom | Géométrie | locate_points (mapping inverse, baignage), project_points (projection sur surface, contact) — internes, pas exposées à Python |
ops::node_field, ops::element_field, ops::field | Champs | positions, gradient, divergence, deformation (ε, F, Green–Lagrange, Cauchy-Green, Hencky, Almansi, J = det F), beam_deformation, shell_deformation, interp_to_gauss (nœuds → Gauss), strain (le B du modèle : l’entrée de chaque loi, EPSI), thermal_strain (déformation thermique EPTH), elastic_stress / elastic_strain (opérateur élastique ELAS, D:ε et D⁻¹:σ), von_mises (contrainte équivalente, von Mises ou Hill, VMIS), stress_measure (Cauchy, Kirchhoff, Piola–Kirchhoff 1 et 2 l’une vers l’autre, CONF pour les contraintes), rotate_frame (axes matériau tournés avec la pièce, R de F = R U), cell_integral (intégrale par maille, INTG 'ELEM'), sum_to_nodes (somme aux nœuds d’un champ par maille, CHAN 'CHPO' 'SOMM'), restrict, restrict_like (reprojection sur le support d’un champ cible), project (interpolation aux nœuds d’un autre maillage, PROI ; d’un champ aux points de Gauss par l’ajustement de chaque maille), select, mask, filter_components / rename_component (extraction et renommage de composantes, EXCO), merge, node_field.consolidate / element_field.consolidate, integral / integral_element (intégrale ∫ f dΩ), xty / xtx (produits scalaires globaux) / psca (produit scalaire nœud par nœud), maths élément par élément (abs, sqrt, exp, cos…)… |
ops::matrix | Assemblage | stiffness, mass, rigidité géométrique geometric, tangente cohérente tangent, concentration lump, composition assemble (assemble des blocs réunis sans leurs valeurs, sans Model), et les deux côtés du bilan Σ f_int = Σ f_ext — internal_forces (le BSIG, ∫ Bᵀ σ ; sans modèle c’est node_field.divergence(field, "sigma")) et external_forces, d’où sort tout terme donné : l’ambiant d’un transfert de bord, la densité d’une charge répartie |
ops::element_field::behavior | Comportement | initial_state (l’état de repos, l’état de A du premier pas), integrate_behavior (le COMP) |
ops::solver | Solveur | solve : multiplicateurs (LU creux), élimination (relations="eliminate"), ensemble actif dès qu’une relation est unilatérale |
ops::export | Visualisation | export_vtk (maillage / champ / évolution → VTK ASCII ou binaire pour ParaView), to_arrays, to_gmsh, to_medcoupling |
archive | Sauvegarde et relecture | save / load (graphe d’objets, partage préservé) — au niveau racine, hors ops |
src/viz | Visualisation | tracé des maillages, coloration par champ |
Le découpage est par conteneur produit : gradient(field, fespace) rend un
ElementField, il vit donc dans ops::element_field à côté de deformation,
et non avec divergence (qui rend un champ nodal). Une opération se range par
sa sortie, jamais par son entrée. Le binding Python reste un miroir 1:1 — voir
Correspondance Rust ↔ Python.
La fonction libre est la forme canonique : c’est elle qui est documentée
dans les chapitres qui suivent. La plupart de ces opérations sont aussi
des méthodes de leur sujet, pour permettre le chaînage —
maillage.border().consolidate() plutôt que
mesh.consolidate(mesh.border(maillage)). La règle qui décide lesquelles, et
ses exclusions, tient dans les trois conditions de
Conventions.
La chaîne typique d’un calcul enchaîne ces opérateurs :
mesh ──► (Mesh) ──► FiniteElementSpace
│
element_field ── material_field ─┤
▼
matrix ── stiffness ──────────► (Matrix) ──┐
node_field ── flux/positions ──► (RHS) ──┤
▼
solver ── solve ──► (NodeField solution)
│
element_field ── strain ──► element_field.behavior ── integrate ──► (efforts)
│
▼
viz ── plot