Vanne 3 voies (mélange / injection / répartition)
La vanne 3 voies (ThermodynamicCycles.Valve3Way) modélise une vanne de
réglage hydraulique dans ses trois montages classiques. Un seul modèle couvre
les trois montages ; c’est le paramètre mounting (et le mode mixing /
diverting) qui fixe la topologie et le critère de dimensionnement.
Les trois montages
Montage |
Topologie |
Rôle |
|---|---|---|
Mélange |
2 entrées → 1 sortie |
mélange une branche réseau (chaude) et un retour (froid) ; débit secondaire ~constant, débit primaire variable. |
Injection |
2 entrées → 1 sortie |
injection d’un primaire dans une boucle secondaire (pompe dédiée) ; même topologie que le mélange, critère d’autorité propre. |
Répartition / décharge |
1 entrée → 2 sorties |
répartit le débit entre le circuit récepteur (voie directe) et un bypass / décharge ; débit primaire constant. |
Loi de perte de charge par voie
La perte de charge suit la loi Kv turbulente appliquée à chaque voie :
avec \(Q_v\) en m³/h, \(\Delta P_v\) en bar et \(d\) la densité relative à l’eau (\(\rho/1000\)).
Voie directe (partie droite) : \(K_{vs}\) déduit du DN (voir plus bas).
Voie perpendiculaire (bypass) : \(K_{vs,\text{bypass}}\) distinct (par défaut égal à la voie directe).
Le \(K_v\) varie avec l’ouverture \(x \in [0,1]\) selon la caractéristique intrinsèque \(K_v(x) = K_{vs}\cdot\varphi(x)\) :
Caractéristique |
Loi exacte |
|---|---|
linéaire |
\(K_v = K_{vs}\,x\) |
égal pourcentage (logarithmique) |
\(K_v = K_{vs}\,R^{(x-1)}\) |
parabolique (quadratique) |
\(K_v = K_{vs}\,x^2\) |
quick-opening |
\(K_v = K_{vs}\,\sqrt{x}\) |
Pour une courbe fabricant tabulée, on charge les points via
set_characteristic_table / load_characteristic_curve ; l’interpolation
peut être semi-log (interp_mode='log'), exacte pour les courbes
équipourcentage où \(\log(K_v)\) est linéaire en \(x\).
Le Kv est déduit du DN (jamais saisi)
L’utilisateur ne saisit pas de \(K_v\) : il choisit un DN, et le
\(K_{vs}\) de la voie directe en est déduit (resolve_kvs). Table
générique par défaut :
DN |
08 |
10 |
15 |
20 |
25 |
32 |
40 |
50 |
65 |
80 |
100 |
|---|---|---|---|---|---|---|---|---|---|---|---|
Kvs (m³/h) |
0,6 |
1,5 |
3 |
5 |
8 |
12 |
20 |
30 |
50 |
80 |
130 |
Un couple DN + type de produit pourra plus tard pointer vers une base de
données de vannes du commerce (hook PRODUCT_DB).
Autorité et dimensionnement
La vanne est correctement dimensionnée quand sa perte de charge grande ouverte est du même ordre que la perte de charge de la branche à débit variable, soit une autorité \(a = \Delta P_{V100} / (\Delta P_{V100} + \Delta P_{\text{branche}}) \approx 0{,}5\) (plage acceptable 0,3–0,7). Le critère dépend du montage :
répartition / décharge : \(\Delta P_{\text{vanne}} = \Delta P_{ls} + \Delta P_a\)
mélange : \(\Delta P_{\text{vanne}} \approx \Delta P_{lp} = \Delta P_e\)
injection : \(\Delta P_{\text{vanne}} \approx \Delta P_{\text{injection}}\)
check_sizing() renvoie l’autorité, un verdict
(correcte / sous-dimensionnée / surdimensionnée) et un DN recommandé.
Utilisation
from ThermodynamicCycles.Valve3Way import Valve3Way
from ThermodynamicCycles.Source import Source
# Deux sources : réseau chaud (voie directe) + retour froid (voie perp.)
CHAUD = Source.Object(); CHAUD.fluid = "water"; CHAUD.Ti_degC = 80
CHAUD.Pi_bar = 3.0; CHAUD.F = 1.2; CHAUD.calculate()
FROID = Source.Object(); FROID.fluid = "water"; FROID.Ti_degC = 45
FROID.Pi_bar = 3.0; FROID.F = 0.8; FROID.calculate()
V = Valve3Way.Object(mode="mixing") # montage mélange (2 -> 1)
V.mounting = "melange"
V.DN = "DN50" # -> Kvs voie directe déduit = 30
V.valve_characteristic = "equal_percentage"
V.rangeability = 50
V.control_mode = "temperature"
V.T_target = 65 # consigne de départ mélangé
V.Inlet1.fluid = "water"; V.Inlet1.h = CHAUD.Outlet.h; V.Inlet1.F = 1.2
V.Inlet2.fluid = "water"; V.Inlet2.h = FROID.Outlet.h; V.Inlet2.F = 0.8
V.calculate()
print("Ouverture %.1f %%, Kvs=%.0f, dP=%.4f bar"
% (V.opening, V.Kvs, V.dp_valve_bar))
# Vérification du dimensionnement (autorité)
V.dp_control_branch_bar = 0.20 # ΔP de la branche variable (bar)
sizing = V.check_sizing()
print(sizing["verdict"], "| a =", round(sizing["authority"], 2),
"| DN conseillé :", sizing["recommended_DN"])
Note
Le mélange (débit + enthalpie) et la régulation de \(\alpha\) (depuis la température cible) sont calculés dans le modèle backend. Voir aussi la Propagation de pression et loi des nœuds (analogie circuit électrique) pour la propagation de la pression aval→amont.
Scènes d’exemple prêtes à charger (simulateur PyqtSimulator) :
src/PyqtSimulator/json/vanne3v_montage_melange.json,
vanne3v_montage_injection.json,
vanne3v_montage_repartition_decharge.json.