Entropyk/_bmad-output/implementation-artifacts/11-3-flooded-evaporator.md

127 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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<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
---
## Références
- [Epic 11 Technical Specifications](../planning-artifacts/epic-11-technical-specifications.md)