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 :

\[Q_v = K_v \cdot \sqrt{\dfrac{\Delta P_v}{d}} \qquad\Longleftrightarrow\qquad \Delta P_v = \left(\dfrac{Q_v}{K_v}\right)^2 \cdot d\]

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.