3.0 KiB
3.0 KiB
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
// 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<dyn HeatTransferModel>,
refrigerant_id: String,
secondary_fluid_id: String,
refrigerant_inlet: ConnectedPort,
refrigerant_outlet: ConnectedPort,
secondary_inlet: ConnectedPort,
secondary_outlet: ConnectedPort,
fluid_backend: Arc<dyn FluidBackend>,
calib: Calib,
target_outlet_quality: f64,
}
impl FloodedEvaporator {
pub fn with_lmtd(
ua: f64,
refrigerant: impl Into<String>,
secondary_fluid: impl Into<String>,
// ... ports
backend: Arc<dyn FluidBackend>,
) -> 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