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é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 RustChapitreContenu
ops::meshMaillageline, 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::modelModèleles 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_fieldConstructionchamps matériau (material_field…)
ops::coordsChampsset, 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Évolutionalong (un champ relevé le long d’une ligne de points, une courbe par composante)
ops::measureChampsintegral / integral_element (∫ f dΩ), xtx / xty (produits scalaires globaux)
ops::geomGéométrielocate_points (mapping inverse, baignage), project_points (projection sur surface, contact) — internes, pas exposées à Python
ops::node_field, ops::element_field, ops::fieldChampspositions, 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::matrixAssemblagestiffness, 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::behaviorComportementinitial_state (l’état de repos, l’état de A du premier pas), integrate_behavior (le COMP)
ops::solverSolveursolve : multiplicateurs (LU creux), élimination (relations="eliminate"), ensemble actif dès qu’une relation est unilatérale
ops::exportVisualisationexport_vtk (maillage / champ / évolution → VTK ASCII ou binaire pour ParaView), to_arrays, to_gmsh, to_medcoupling
archiveSauvegarde et relecturesave / load (graphe d’objets, partage préservé) — au niveau racine, hors ops
src/vizVisualisationtracé 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