# Story 11.8: CorrelationSelector

**Epic:** 11 - Advanced HVAC Components  
**Priorité:** P1-HIGH  
**Estimation:** 4h  
**Statut:** backlog  
**Dépendances:** Aucune

---

## Story

> En tant qu'ingénieur simulation,  
> Je veux sélectionner parmi plusieurs corrélations de transfert thermique,  
> Afin de comparer différents modèles ou utiliser le plus approprié.

---

## Contexte

Différentes corrélations existent pour calculer le coefficient de transfert thermique (h). Le choix dépend de:
- Type d'échangeur (tubes, plaques)
- Phase (évaporation, condensation, monophasique)
- Fluide
- Conditions opératoires

---

## Corrélations Disponibles

### Évaporation

| Corrélation | Année | Application | Défaut |
|-------------|-------|-------------|--------|
| Longo | 2004 | Plaques BPHX | ✅ |
| Kandlikar | 1990 | Tubes | |
| Shah | 1982 | Tubes horizontal | |
| Gungor-Winterton | 1986 | Tubes | |
| Chen | 1966 | Tubes classique | |

### Condensation

| Corrélation | Année | Application | Défaut |
|-------------|-------|-------------|--------|
| Longo | 2004 | Plaques BPHX | ✅ |
| Shah | 1979 | Tubes | ✅ Tubes |
| Shah | 2021 | Plaques récent | |
| Ko | 2021 | Low-GWP plaques | |
| Cavallini-Zecchin | 1974 | Tubes | |

### Monophasique

| Corrélation | Année | Application | Défaut |
|-------------|-------|-------------|--------|
| Gnielinski | 1976 | Turbulent | ✅ |
| Dittus-Boelter | 1930 | Turbulent simple | |
| Sieder-Tate | 1936 | Laminaire | |

---

## Architecture

```rust
// crates/components/src/correlations/mod.rs

pub trait HeatTransferCorrelation: Send + Sync {
    fn name(&self) -> &str;
    fn year(&self) -> u16;
    fn supported_types(&self) -> Vec<CorrelationType>;
    fn supported_geometries(&self) -> Vec<ExchangerGeometryType>;
    fn compute(&self, ctx: &CorrelationContext) -> Result<CorrelationResult, CorrelationError>;
    fn validity_range(&self) -> ValidityRange;
    fn reference(&self) -> &str;
}

pub struct CorrelationSelector {
    defaults: HashMap<CorrelationType, Box<dyn HeatTransferCorrelation>>,
    selected: Option<Box<dyn HeatTransferCorrelation>>,
}
```

---

## Fichiers à Créer/Modifier

| Fichier | Action |
|---------|--------|
| `crates/components/src/correlations/mod.rs` | Créer |
| `crates/components/src/correlations/longo.rs` | Créer |
| `crates/components/src/correlations/shah.rs` | Créer |
| `crates/components/src/correlations/kandlikar.rs` | Créer |
| `crates/components/src/correlations/gnielinski.rs` | Créer |

---

## Critères d'Acceptation

- [ ] `HeatTransferCorrelation` trait défini
- [ ] Longo (2004) implémenté (évap + cond)
- [ ] Shah (1979) implémenté (cond)
- [ ] Kandlikar (1990) implémenté (évap)
- [ ] Gnielinski (1976) implémenté (monophasique)
- [ ] `CorrelationSelector` avec defaults par type
- [ ] Chaque corrélation documente sa plage de validité
- [ ] `CorrelationResult` inclut h, Re, Pr, Nu, validity

---

## Références

- [Epic 11 Technical Specifications](../planning-artifacts/epic-11-technical-specifications.md)
- Longo, G.A. et al. (2004). Int. J. Heat Mass Transfer
