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, 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 — les deux seuls opérateurs qui écrivent la géométrie
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, beam_deformation, shell_deformation, interp_to_gauss (nœuds → Gauss), thermal_strain (déformation thermique EPTH), restrict, restrict_like (reprojection sur le support d’un champ cible), 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 (réassemble depuis les blocs seuls, 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::behaviorComportementintegrate_behavior (le COMP)
ops::solverSolveursolve (LU creux, Lagrange), solve_eliminate (condensation MPC), solve_unilateral (actif/inactif, relations unilatérales)
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 ── deformation ──► element_field.behavior ── integrate ──► (efforts)
                                     │
                                     ▼
                                   viz ── plot