Premiers pas
Ce tutoriel accompagne pas à pas un premier contact avec pyrucast : l’installer, lancer un calcul, puis mailler une pièce et y résoudre un problème thermique, en comprenant chaque ligne. Il suppose quelques notions sur la méthode des éléments finis, mais pas de pratique de Python : la page Python & conventions pyrucast en donne tout ce qu’il faut.
Le fil rouge des pages Maillage et Thermique linéaire est une chape percée — une plaque terminée par un demi-disque, trouée en son centre — que l’on maille, puis que l’on chauffe :
Installer pyrucast
pyrucast s’installe par pip, l’outil qui installe les paquets Python. Les
commandes de cette page se tapent dans un terminal : PowerShell sous
Windows, l’application Terminal sous macOS et Linux. Il faut Python 3.11 ou
plus récent (python.org). Une seule
commande :
pip install pyrucast
Sous Linux et macOS, les commandes s’appellent souvent python3 et pip3 :
remplacez-les dans toute la suite si python est introuvable.
C’est tout : rien à compiler. Cette version, dite précompilée, contient le calcul et la visualisation (fenêtre interactive et export d’images). Elle existe pour Linux (processeurs x86_64), Windows 64 bits et macOS (Intel et Apple Silicon) ; pour les autres cas, voir Installation et démarrage rapide.
Pour passer plus tard à une version plus récente :
pip install --upgrade pyrucast
Un environnement à part. Pour garder pyrucast séparé des autres paquets Python de la machine, on peut l’installer dans un environnement virtuel, un dossier qui contient son propre Python :
python -m venv .venv source .venv/bin/activate # Linux, macOS .\.venv\Scripts\Activate.ps1 # Windows (PowerShell) pip install pyrucastIl faut alors réactiver l’environnement (deuxième ou troisième ligne) dans chaque nouveau terminal.
Vérifier l’installation
python -c "import pyrucast; print(pyrucast.__version__)"
La commande affiche le numéro de la version installée. Un message
ModuleNotFoundError: No module named 'pyrucast' veut dire que pyrucast n’est
pas installé pour ce Python-là — par exemple parce que l’environnement
virtuel n’est pas activé.
Un premier calcul
Le plus petit calcul complet : une plaque carrée d’acier de 10 cm de côté, chauffée uniformément dans toute sa masse, dont le bord est tenu à 0 °C. Où est-elle la plus chaude, et à quelle température ?
Le script tient en cinq gestes, les mêmes pour tout calcul. D’abord les données :
COTE = 0.10 # m, côté de la plaque / plate side
N = 20 # éléments par côté / elements per side
K_COND = 50.0 # W/m/K, acier / steel
SOURCE = 1.0e6 # W/m³, chauffage uniforme / uniform heating
Mailler. Une ligne de 20 segments, balayée sur la hauteur, donne une grille de 20 × 20 quadrangles. Le bord est repris en nœuds, pour y imposer la température :
# FR — Une ligne de N segments, balayée sur la hauteur : N × N QUA4.
# EN — A line of N segments, swept over the height: N × N QUA4.
coords = pc.Coords(2)
a = coords.add_node([0.0, 0.0])
b = coords.add_node([COTE, 0.0])
plaque = pc.mesh.extrude(pc.mesh.line(a, b, N), [0.0, COTE], N)
# FR — Les nœuds du bord, qui seront tenus à 0 °C.
# EN — The boundary nodes, which will be held at 0 °C.
bord = pc.mesh.to_poi1(pc.mesh.border(plaque))
Déclarer la physique. La conduction sur la plaque, le blocage du bord et la
source de chaleur sont trois termes d’un même modèle, réunis par | ; le
modèle réclame ensuite ses coefficients, la conductivité « k » et la densité de
source « phi_q » :
# FR — La conduction sur la plaque, le bord bloqué, la source partout.
# EN — Conduction over the plate, the boundary held, the source everywhere.
fes = pc.FiniteElementSpace(plaque)
modele = pc.model.heat_conduction(fes)
modele = modele | pc.model.dirichlet(bord, modele, "T")
modele = modele | pc.model.flux(fes, modele, "q")
# FR — Les coefficients que le modèle réclame : « k » et la densité « phi_q ».
# EN — The coefficients the model asks for: "k" and the density "phi_q".
materiaux = pc.element_field.material_field(
modele, [("k", K_COND), ("phi_q", SOURCE)]
)
Résoudre. Le second membre, la matrice, puis la solution :
# FR — Second membre, matrice, résolution. Aucune température imposée à
# écrire : une valeur absente vaut 0.
# EN — Right-hand side, matrix, solution. No imposed temperature to write:
# a missing value is 0.
second_membre = pc.node_field.external_forces(modele, materiaux)
K = pc.matrix.stiffness(modele, materiaux)
temperature = pc.solver.solve(K, second_membre)
print(f"T max = {temperature.max('T'):.2f} °C")
Tracer.
# FR — Une fenêtre s'ouvre ; le script se termine quand on la ferme.
# EN — A window opens; the script ends when it is closed.
plaque.plot(
field=temperature,
component="T",
view=(0, 90, 1.0), # FR — vue de dessus / EN — top view
title="Température (°C)",
save=os.path.join(OUT, "premier-calcul.svg") if OUT else None,
)
Le centre monte à 14,76 °C. La solution exacte de ce problème est connue : \( T_{\max} \approx 0{,}0737\, q L^2 / k = 14{,}73 \) °C. Le maillage de 20 × 20 éléments s’en approche à 0,2 % près.
Le lancer
Enregistrez
premier_calcul.py
(bouton Download raw file de la page) dans un dossier, ouvrez un terminal
dans ce dossier, et lancez :
python premier_calcul.py
Le terminal affiche T max = 14.76 °C et une fenêtre s’ouvre : la souris fait
tourner la vue, la molette zoome. Le script se termine quand on ferme la
fenêtre.
Les scripts du tutoriel
Chaque page qui suit est construite sur un script complet, rangé dans le
dossier tutoriel/
du dépôt. Le code affiché dans les pages est extrait directement de ces
scripts, qui sont exécutés à chaque vérification du projet : ce que vous
lisez est ce qui tourne. Chaque page se termine par son script complet.
Pour suivre les pages qui partent de Maillage, enregistrez
leurs scripts dans le même dossier — chacun reprend le maillage et les
données des précédents — puis lancez-les dans cet ordre, comme le premier
calcul. Les scripts de dilatation et de plasticité relisent le fichier
qu’écrit thermique_non_lineaire.py : il doit avoir tourné avant eux.
python maillage.py
python thermique.py
python thermique_transitoire.py
python thermique_non_lineaire.py
python mecanique_elastique.py
python mecanique_dilatation.py
python mecanique_heterogene.py
python plasticite.py
python contact.py
Chaque figure s’ouvre dans sa fenêtre ; fermez-la pour passer à la suivante.
Le parcours
- Premiers pas — cette page.
- Ce que fait pyrucast — les étapes d’un calcul, les physiques disponibles, où trouver la documentation.
- Python & conventions pyrucast — le Python des scripts, les raccourcis de pyrucast, où chercher une fonction.
- Maillage — mailler la chape, en non structuré (triangulation) puis en structuré quadratique (balayages).
- Thermique linéaire — l’équation de la chaleur, puis ses deux régimes : stationnaire (conduction, flux imposé, convection et source, sur des régions repérées par leur géométrie) et transitoire (les sollicitations qui s’établissent dans le temps, le flux de chaleur).
- Thermique non linéaire — le rayonnement, en kelvins ; le champ parcouru dans le temps, la sauvegarde du calcul.
- Mécanique linéaire — l’équilibre et la loi de Hooke, puis la chape encastrée sous une masse : élasticité (trois façons de poser la masse, déformée, contraintes, von Mises le long d’une ligne), dilatation (la température relue du calcul thermique) et matériau hétérogène (un coefficient de dilatation qui varie).
- Mécanique non linéaire — le calcul pas à pas : plasticité (une limite d’élasticité constante, puis selon la température) et contact (un appui posé dans l’alésage).
- Compléments — pour aller plus loin.