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

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 pyrucast

Il 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

  1. Premiers pas — cette page.
  2. Ce que fait pyrucast — les étapes d’un calcul, les physiques disponibles, où trouver la documentation.
  3. Python & conventions pyrucast — le Python des scripts, les raccourcis de pyrucast, où chercher une fonction.
  4. Maillage — mailler la chape, en non structuré (triangulation) puis en structuré quadratique (balayages).
  5. 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).
  6. Thermique non linéaire — le rayonnement, en kelvins ; le champ parcouru dans le temps, la sauvegarde du calcul.
  7. 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).
  8. 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).
  9. Compléments — pour aller plus loin.