# Story 11.3: FloodedEvaporator **Epic:** 11 - Advanced HVAC Components **Priorité:** P0-CRITIQUE **Estimation:** 6h **Statut:** backlog **Dépendances:** Story 11.2 (Drum) --- ## Story > En tant qu'ingénieur chiller, > Je veux un composant FloodedEvaporator, > Afin de simuler des chillers avec évaporateurs noyés. --- ## Contexte L'évaporateur flooded est un échangeur où le réfrigérant liquide inonde complètement les tubes via un récepteur basse pression. La sortie est un mélange diphasique typiquement à 50-80% de vapeur. **Différence avec évaporateur DX:** - DX: Sortie surchauffée (x ≥ 1) - Flooded: Sortie diphasique (x ≈ 0.5-0.8) --- ## Ports ``` Réfrigérant (flooded): refrigerant_in: Entrée liquide sous-refroidi ou diphasique refrigerant_out: Sortie diphasique (titre ~0.5-0.8) Fluide secondaire: secondary_in: Entrée eau/glycol (chaud) secondary_out: Sortie eau/glycol (refroidi) ``` --- ## Équations ``` 1. Transfert thermique: Q = UA × ΔT_lm (ou ε-NTU) 2. Bilan énergie réfrigérant: Q = ṁ_ref × (h_ref_out - h_ref_in) 3. Bilan énergie fluide secondaire: Q = ṁ_fluid × cp_fluid × (T_fluid_in - T_fluid_out) 4. Titre de sortie (calculé, pas imposé): x_out = (h_out - h_sat_l) / (h_sat_v - h_sat_l) ``` --- ## Fichiers à Créer/Modifier | Fichier | Action | |---------|--------| | `crates/components/src/flooded_evaporator.rs` | Créer | | `crates/components/src/lib.rs` | Ajouter module | --- ## Implémentation ```rust // crates/components/src/flooded_evaporator.rs use entropyk_core::{Power, Calib}; use entropyk_fluids::{FluidBackend, FluidId}; use crate::heat_exchanger::{HeatTransferModel, LmtdModel, EpsNtuModel}; use crate::{Component, ComponentError, ConnectedPort, SystemState}; pub struct FloodedEvaporator { model: Box, refrigerant_id: String, secondary_fluid_id: String, refrigerant_inlet: ConnectedPort, refrigerant_outlet: ConnectedPort, secondary_inlet: ConnectedPort, secondary_outlet: ConnectedPort, fluid_backend: Arc, calib: Calib, target_outlet_quality: f64, } impl FloodedEvaporator { pub fn with_lmtd( ua: f64, refrigerant: impl Into, secondary_fluid: impl Into, // ... ports backend: Arc, ) -> Self { /* ... */ } pub fn with_target_quality(mut self, quality: f64) -> Self { self.target_outlet_quality = quality.clamp(0.0, 1.0); self } pub fn outlet_quality(&self, state: &SystemState) -> f64 { /* ... */ } } ``` --- ## Critères d'Acceptation - [ ] Support modèles LMTD et ε-NTU - [ ] Sortie réfrigérant diphasique (x ∈ [0, 1]) - [ ] `outlet_quality()` retourne le titre - [ ] Calib factors (f_ua, f_dp) applicables - [ ] Corrélation Longo (2004) par défaut pour BPHX - [ ] n_equations() = 4 --- ## Références - [Epic 11 Technical Specifications](../planning-artifacts/epic-11-technical-specifications.md)