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

Compléments

Éléments structuraux

Cast3M sélectionne le type d’élément dans MODE ('POUT', 'TIMO', 'DKT', 'COQ4'…) et ses caractéristiques géométriques dans MATE ('SECT', 'INRY', 'EPAI'…). pyrucast suit le même principe : un opérateur model.<physique>(fes, ...) par famille d’éléments, des composantes matériau nommées portant la géométrie de la section.

pyrucastCast3Mprimales / duales
model.truss(fes)MODE ... 'BARR'u_x,u_y(,u_z) / f_x,f_y(,f_z)
model.timoshenko(fes)MODE ... 'TIMO'w, theta / f_w, m_theta
model.timoshenko(fes)MODE ... 'POUT'selon la dimension : w, theta en 1-D, u_x, u_y, r_z en plan, six DDL dans l’espace

Barre en traction — comparée à la solution analytique \( u_x = F \cdot L / (E \cdot A) \), export du résultat au format VTK :

    coords = pc.Coords(2)
    n0 = coords.add_node([0.0, 0.0])
    n1 = coords.add_node([L, 0.0])
    mesh = pc.mesh.line(n0, n1, 1)
    fes = pc.FiniteElementSpace(mesh)

    modele = pc.model.truss(fes)
    modele = modele | encastrement(modele, n0, "u_x")
    modele = modele | encastrement(modele, n0, "u_y")
    modele = modele | encastrement(modele, n1, "u_y")  # no transverse stiffness

    materiaux = pc.element_field.material_field(modele, [("E", E), ("A", A)])

    charge = pc.mesh.poi1_from_nodes([n1])
    second_membre = pc.NodeField(charge, ["f_x"])
    second_membre[0].set_value(n1, "f_x", F)

    K = pc.matrix.stiffness(modele, materiaux)
    solution = pc.solver.solve(K, second_membre)
    u_propre = pc.node_field.restrict_like(solution, pc.NodeField(mesh, ["u_x", "u_y"]))
    chemin = os.path.join(tempfile.gettempdir(), "barre.vtk")
    pc.export.export_vtk(mesh, chemin, u_propre)
    print(f"Displacement field exported (VTK, readable by ParaView): {chemin}")

Non disponible dans pyrucast. Pas d’élément coque (Cast3M DKT, COQ4, COQ2) — la mécanique 2D/3D de pyrucast reste un continuum (contraintes planes, déformations planes, 3D massif) ou des éléments structuraux filaires (barre, poutre). Pas de mode axisymétrique (Cast3M OPTI 'MODE' 'AXIS') ni de configuration purement 1D (OPTI 'DIME' 1) — Coords est toujours 2D ou 3D cartésien.

Pour la matrice de masse cohérente et la rigidité géométrique (flambage linéarisé), voir Assemblage par MatrixKind — pyrucast.matrix.mass/lump/geometric/tangent, l’équivalent Cast3M MASS/LUMP/KSIG/KTAN.

Aller plus loin en 3D

Cette formation reste en 2D, mais rien n’empêche de reprendre la même plaque trouée en volume :

  • pyrucast.mesh.extrude(mesh, direction, n_couches) — balayage d’un maillage SEG2/TRI3/QUA4 selon une direction, dans le même espace de coordonnées (Cast3M TRAN/VOLU 'TRAN') ;
  • pyrucast.mesh.revolve(mesh, angle, n_couches, centre, axe) — le même balayage, mais en rotation autour d’un axe ; un tour complet referme le volume engendré (Cast3M ROTA/VOLU 'ROTA') ;
  • pyrucast.mesh.sweep_solid(mesh_a, mesh_b, n_couches) — balayage entre deux profils TRI3/QUA4 non parallèles (Cast3M REGL + VOLU) ;
  • pyrucast.mesh.triangulate_volume(enveloppe, taille) — remplissage TET4 d’une enveloppe TRI3 fermée par triangulation de Delaunay 3D (Cast3M VOLU par remplissage).

Aucun de ces quatre n’est mis en œuvre dans les scripts de cette formation.

Éléments finis supportés

Catalogue complet : Éléments finis supportés — 14 types, de POI1 à HEX27, y compris les versions quadratiques (pyrucast.mesh.to_quadratic, l’équivalent Cast3M CHAN 'TRI6' ...).

Échanges avec les outils extérieurs

pyrucast échange avec trois outils externes :

  • gmsh — fichier .msh (pyrucast.mesh.read_gmsh, read_gmsh_str) ou session vivante, dans les deux sens et avec les vues (pyrucast.mesh.from_gmsh, pyrucast.export.to_gmsh) ;
  • MED (Salome, code_aster) au travers de medcoupling — maillages, groupes, champs aux nœuds, aux mailles et aux points de Gauss, séries temporelles (pyrucast.mesh.from_medcoupling, pyrucast.export.to_medcoupling) ;
  • VTK legacy pour ParaView, ASCII ou binaire, et séries temporelles (pyrucast.export.export_vtk) — voir la fin du script de barre plus haut.

Non disponible dans pyrucast. Pas d’échange Nastran/Abaqus, pas de format CSV/Excel dédié pour les listes ou les tables (Cast3M SORT 'EXCE'/LIRE 'CSV'), pas de format XDR de sauvegarde/restitution (Cast3M OPTI 'SAUV'/OPTI 'REST') — un script pyrucast reconstruit toujours son état depuis son code, il ne le sérialise pas sur disque. L’export VTK est en outre limité au format legacy (pas de .vtu) : un champ par fichier.

Développer sur pyrucast

pyrucast est un projet Rust ordinaire : pas de procédures Gibiane à écrire dans un dossier procedur/, pas de compilation de sources Esope. Pour ajouter une physique, un élément fini ou un opérateur, on modifie directement le code Rust puis on relance maturin develop --release. Voir Développer — en particulier Ajouter une physique et Ajouter un élément fini, qui jouent le rôle des chapitres Cast3M sur les sources Esope.

Communauté

Projet ouvert : voir le fichier AGENTS.md/README du dépôt pour les modalités de contribution actuelles.