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.
| pyrucast | Cast3M | primales / 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 (Cast3MOPTI 'MODE' 'AXIS') ni de configuration purement 1D (OPTI 'DIME' 1) —Coordsest 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 maillageSEG2/TRI3/QUA4selon une direction, dans le même espace de coordonnées (Cast3MTRAN/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é (Cast3MROTA/VOLU 'ROTA') ;pyrucast.mesh.sweep_solid(mesh_a, mesh_b, n_couches)— balayage entre deux profilsTRI3/QUA4non parallèles (Cast3MREGL+VOLU) ;pyrucast.mesh.triangulate_volume(enveloppe, taille)— remplissageTET4d’une enveloppeTRI3fermée par triangulation de Delaunay 3D (Cast3MVOLUpar 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 (Cast3MOPTI '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.