Propagation de pression et loi des nœuds (analogie circuit électrique)
Les modèles hydrauliques se comportent comme un circuit électrique, avec une correspondance directe :
Hydraulique |
Électrique |
Loi |
|---|---|---|
Débit \(\dot m\) (kg/s) |
Courant \(I\) |
Loi des nœuds (KCL) : \(\sum \dot m_{\text{entrant}} = \sum \dot m_{\text{sortant}}\) |
Pression \(P\) (Pa) |
Potentiel \(V\) |
Un nœud a un potentiel unique (pressions homogènes) |
Composant (résistance) |
Résistance \(R\) |
\(\Delta P = f(\dot m)\) (chute de potentiel) |
Circuit série |
Résistances en série |
Loi des mailles (KVL) : \(\sum \Delta P = P_{\text{amont}} - P_{\text{aval}}\) |
Sens de propagation
Une résistance (tube, coude, vanne, té…) reçoit un débit et calcule sa perte de charge \(\Delta P\). La pompe, elle, impose le débit à partir du \(\Delta P\) qu’elle voit sur sa courbe.
La pression est un potentiel ancré en aval (un puits / une condition limite impose sa pression). Chaque composant remonte alors la pression à contre-courant du débit :
Ce comportement est événementiel : la pression est une property du port
fluide ; l’imposer déclenche le callback du composant, qui recalcule
(calculate()) et propage. Si aucune pression aval n’est connue, on retombe
sur le sens direct \(P_{\text{sortie}} = P_{\text{entrée}} - \Delta P\).
Loi des nœuds (Kirchhoff)
Lorsqu’on connecte des ports (Fluid_connect), ils forment un nœud
hydraulique. La loi de nœud (Connect._apply_kirchhoff_law) impose :
Homogénéité des pressions — tous les ports d’un nœud partagent le même potentiel (comme les nœuds d’un circuit).
Conservation du débit (KCL) — débit entrant = débit sortant (répartiteur / collecteur).
Mélange masse + énergie — quand plusieurs flux convergent, le nœud calcule lui-même le mélange :
\[\dot m_{\text{out}} = \sum_i \dot m_i \qquad h_{\text{mix}} = \dfrac{\sum_i \dot m_i\, h_i}{\sum_i \dot m_i}\]Ainsi un mélangeur est une simple loi de nœud (pas besoin d’un modèle dédié) : deux flux qui entrent dans un même point sont mélangés automatiquement.
Ordonnanceur différé
Pour éviter des cascades de recalculs synchrones sur les grands réseaux, un
ordonnanceur différé (FluidPort.propagation) transforme la propagation en
file itérative drainée jusqu’au point fixe (convergence garantie par la
détection de changement de valeur), avec un mode asynchrone (Qt). En
l’absence d’ordonnanceur actif, le comportement synchrone historique est conservé
(rétro-compatibilité, aucune régression).
Composants supportés
Le principe (conserver la température, recalculer \(h\), propager la pression aval→amont) est implémenté dans les modèles backend :
Tube droit, Vanne TA (
StraightPipe,TA_Valve) ;Vanne 3 voies (3 montages) ;
Coudes et singularités (
CurvedBend,EdgedBend,SuddenContraction,SuddenExpansion) ;Tés (
ConvergingTee: 2→1 ;DivergingTee: 1→2) ;Source (
Source) : conserve \(T\), recalcule \(h\) à la pression réseau imposée.
Exemple : circuit série (KCL + KVL + potentiel)
from ThermodynamicCycles.Source import Source
from ThermodynamicCycles.Hydraulic import StraightPipe
from ThermodynamicCycles.Connect import Fluid_connect
src = Source.Object(); src.fluid = "water"; src.Ti_degC = 15
src.Pi_bar = 5; src.F = 1.0; src.calculate()
p1 = StraightPipe.Object(); p1.L = 10; p1.d_hyd = 0.05
p2 = StraightPipe.Object(); p2.L = 20; p2.d_hyd = 0.05
Fluid_connect(p1.Inlet, src.Outlet); p1.calculate()
Fluid_connect(p2.Inlet, p1.Outlet); p2.calculate()
# Le puits impose le POTENTIEL aval -> il remonte jusqu'à la source
p2.Outlet.P = 3.0e5
# Potentiel homogène aux nœuds : p1.Outlet.P == p2.Inlet.P
# KVL (série) : P_source - P_sink == dP1 + dP2
# KCL (courant) : débit = 1.0 kg/s partout
Note
Vérifié numériquement : potentiels de nœud égaux (à <1 Pa), somme des chutes série égale à l’écart de pression total (à <1 Pa), et débit conservé à \(10^{-6}\) près sur tout le circuit — exactement le comportement d’un circuit électrique courant/potentiel.