Compléments
Éléments structuraux
pyrucast choisit le type d’élément par l’opérateur de modèle : un opérateur
model.<physique>(fes, ...) par famille d’éléments, et des composantes
matériau nommées pour la géométrie de la section.
| pyrucast | primales / duales |
|---|---|
model.truss(fes) | u_x,u_y(,u_z) / f_x,f_y(,f_z) |
model.timoshenko(fes) | selon la dimension : w, theta / f_w, m_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}")
Les poutres d’Euler-Bernoulli
(model.bernoulli) et les coques (model.shell)
ont leurs pages dans le chapitre de mécanique. Un calcul axisymétrique se pose
sur un Coords.axisymmetric(), le plan méridien d’un corps de révolution :
voir Coordonnées.
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.
Mailler en volume
À partir de la page Maillage, les calculs de ce tutoriel se font en volume. Les mailleurs de volume de pyrucast :
pyrucast.mesh.extrude(mesh, direction, n_couches)— balayage d’un maillageSEG2/TRI3/QUA4selon une direction, dans le même espace de coordonnées ;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é ;pyrucast.mesh.sweep_solid(mesh_a, mesh_b, n_couches)— balayage entre deux profilsTRI3/QUA4non parallèles ;pyrucast.mesh.triangulate_volume(enveloppe, taille)— remplissageTET4d’une enveloppeTRI3fermée par triangulation de Delaunay 3D.
La page Maillage emploie extrude et triangulate_volume, la
page Contact revolve ; sweep_solid n’y sert pas.
Éléments finis supportés
Catalogue complet : Éléments finis supportés — 15
types, de SEG2 à HEX27, y compris les versions quadratiques
(pyrucast.mesh.to_quadratic passe un maillage linéaire en quadratique).
É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.
Un calcul se sauvegarde et se relit avec pyrucast.save et pyrucast.load :
la page Thermique non linéaire écrit un fichier
que les pages de mécanique relisent.
Non disponible dans pyrucast. Pas d’échange Nastran/Abaqus, pas de format CSV/Excel dédié pour les listes ou les tables. 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. 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.
Communauté
Projet ouvert : voir le fichier AGENTS.md/README du dépôt pour les
modalités de contribution actuelles.