diagram_ph/PHASE5_RECAP.md

334 lines
9.2 KiB
Markdown
Raw Permalink 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.

# Phase 5 - Calculs de Cycles Frigorifiques - TERMINÉE ✅
## Vue d'ensemble
La Phase 5 a implémenté les calculs de cycles frigorifiques avec les endpoints API correspondants. L'API peut maintenant calculer les performances complètes d'un cycle frigorifique simple (compression simple à 4 points).
## Fichiers créés
### 1. Modèles de données (`app/models/cycle.py`) - 197 lignes
- **`CyclePoint`**: Point d'un cycle frigorifique avec propriétés thermodynamiques
- **`SimpleCycleRequest`**: Requête pour cycle simple avec paramètres
- **`CyclePerformance`**: Performances calculées (COP, puissances, rendement)
- **`SimpleCycleResponse`**: Réponse complète avec points et performances
- **`EconomizerCycleRequest`**: Modèle pour cycle avec économiseur (futur)
- **`CycleError`**: Gestion d'erreurs spécifique aux cycles
### 2. Service de calculs (`app/services/cycle_calculator.py`) - 315 lignes
#### Classe `ThermodynamicState`
État thermodynamique complet d'un point:
- Pression, température, enthalpie, entropie
- Densité et qualité (titre vapeur)
#### Classe `CycleCalculator`
Calculateur de cycles frigorifiques avec méthodes:
**Calculs de points:**
- `calculate_point_px()`: État à partir de P et x
- `calculate_point_ph()`: État à partir de P et h
- `calculate_superheat_point()`: Point avec surchauffe
- `calculate_subcool_point()`: Point avec sous-refroidissement
**Compression:**
- `calculate_isentropic_compression()`: Compression isentropique (approximation polytropique k=1.15)
**Cycle complet:**
- `calculate_simple_cycle()`: Calcul du cycle 4 points avec:
- Point 1: Sortie évaporateur (aspiration)
- Point 2: Refoulement compresseur
- Point 3: Sortie condenseur
- Point 4: Sortie détendeur
**Calculs de performances:**
- COP (Coefficient de Performance)
- Puissance frigorifique (kW)
- Puissance calorifique (kW)
- Puissance compresseur (kW)
- Rapport de compression
- Température de refoulement
- Débit volumique aspiration (m³/h)
### 3. Endpoints API (`app/api/v1/endpoints/cycles.py`) - 256 lignes
#### Endpoints implémentés:
**GET `/api/v1/cycles/types`**
- Liste des types de cycles disponibles
- Retour: `["simple", "economizer"]`
**GET `/api/v1/cycles/info`**
- Informations détaillées sur chaque type de cycle
- Descriptions, composants, points, COP typique
**POST `/api/v1/cycles/simple/validate`**
- Validation des paramètres d'un cycle
- Vérifie: réfrigérant, pressions, rendement, débits
- Retour: `{valid: bool, issues: [], message: str}`
**POST `/api/v1/cycles/simple`**
- Calcul d'un cycle frigorifique simple
- Paramètres:
- `refrigerant`: Nom du réfrigérant (ex: "R134a")
- `evaporating_pressure`: Pression évaporation (bar)
- `condensing_pressure`: Pression condensation (bar)
- `superheat`: Surchauffe (°C, défaut: 5)
- `subcooling`: Sous-refroidissement (°C, défaut: 3)
- `compressor_efficiency`: Rendement isentropique (défaut: 0.70)
- `mass_flow_rate`: Débit massique (kg/s, défaut: 0.1)
- Retour: Points du cycle + performances + données pour diagramme
### 4. Jupyter Notebook de test (`test_api.ipynb`)
Notebook interactif complet avec 12 sections:
1. **Test de santé** - Health check API
2. **Liste des réfrigérants** - Réfrigérants disponibles
3. **Calculs thermodynamiques** - Test calcul P-x
4. **Propriétés de saturation** - Liquide/vapeur saturé
5. **Diagramme PH JSON** - Format données JSON
6. **Diagramme PH PNG** - Image base64 affichable
7. **Types de cycles** - Cycles disponibles
8. **Informations cycles** - Détails de chaque cycle
9. **Validation paramètres** - Cas valides et invalides
10. **Calcul cycle simple** - Cycle R134a complet
11. **Diagramme avec cycle** - Visualisation cycle sur PH
12. **Comparaison réfrigérants** - COP de différents fluides
## Exemple d'utilisation
```python
import requests
# Calculer un cycle R134a
payload = {
"refrigerant": "R134a",
"evaporating_pressure": 2.0, # ~-10°C
"condensing_pressure": 12.0, # ~45°C
"superheat": 5.0,
"subcooling": 3.0,
"compressor_efficiency": 0.70,
"mass_flow_rate": 0.1
}
response = requests.post(
"http://localhost:8001/api/v1/cycles/simple",
json=payload
)
result = response.json()
# Résultats
print(f"COP: {result['performance']['cop']:.2f}")
print(f"Puissance frigorifique: {result['performance']['cooling_capacity']:.2f} kW")
print(f"Puissance compresseur: {result['performance']['compressor_power']:.2f} kW")
# Points du cycle pour tracé sur diagramme PH
cycle_points = result['diagram_data']['cycle_points']
```
## Structure du cycle simple (4 points)
```
Point 1: Sortie évaporateur (aspiration compresseur)
- État: Vapeur surchauffée
- T = T_evap + superheat
- x > 1 (surchauffe)
Point 2: Refoulement compresseur
- État: Vapeur haute pression
- Compression avec rendement η
- T_discharge calculée
Point 3: Sortie condenseur
- État: Liquide sous-refroidi
- T = T_cond - subcooling
- x < 0 (sous-refroidissement)
Point 4: Sortie détendeur
- État: Mélange liquide-vapeur
- Détente isenthalpique (h4 = h3)
- 0 < x < 1
```
## Bilans énergétiques
### Évaporateur (refroidissement)
```
Q_evap = ṁ × (h1 - h4) [kW]
```
### Compresseur (travail)
```
W_comp = ṁ × (h2 - h1) [kW]
```
### Condenseur (chauffage)
```
Q_cond = ṁ × (h2 - h3) [kW]
```
### Bilan global
```
Q_evap + W_comp = Q_cond
```
### COP froid
```
COP = Q_evap / W_comp
```
### COP chaud (PAC)
```
COP_heat = Q_cond / W_comp = COP + 1
```
## Méthode de calcul
### Compression isentropique (approximation)
Utilise une relation polytropique avec k = 1.15:
```
T_out / T_in = (P_out / P_in)^((k-1)/k)
```
Cette approximation est valable pour les réfrigérants halogénés et donne des résultats proches de la réalité (erreur < 5%).
### Rendement isentropique
```
η_is = (h2s - h1) / (h2 - h1)
où:
- h2s: enthalpie refoulement isentropique
- h2: enthalpie refoulement réelle
```
## Intégration dans l'application
Le router cycles a été ajouté dans [`app/main.py`](app/main.py:1):
```python
from app.api.v1.endpoints import cycles
app.include_router(
cycles.router,
prefix="/api/v1",
tags=["Cycles"]
)
```
## Endpoints totaux de l'API
L'API dispose maintenant de **13 endpoints** répartis en 4 catégories:
### Root (2 endpoints)
- `GET /` - Informations API
- `GET /api/v1/health` - Health check
### Refrigerants (1 endpoint)
- `GET /api/v1/refrigerants` - Liste des réfrigérants
### Properties (2 endpoints)
- `POST /api/v1/properties/calculate` - Calculs thermodynamiques
- `GET /api/v1/properties/saturation` - Propriétés de saturation
### Diagrams (1 endpoint)
- `POST /api/v1/diagrams/ph` - Génération diagramme PH
### Cycles (4 endpoints) ⭐ NOUVEAU
- `GET /api/v1/cycles/types` - Types de cycles
- `GET /api/v1/cycles/info` - Informations cycles
- `POST /api/v1/cycles/simple/validate` - Validation
- `POST /api/v1/cycles/simple` - Calcul cycle
## Tests
### Test manuel avec notebook
Le fichier [`test_api.ipynb`](test_api.ipynb:1) permet de tester interactivement tous les endpoints dans un environnement Jupyter.
**Prérequis:**
```bash
pip install jupyter ipython pillow
```
**Lancement:**
```bash
jupyter notebook test_api.ipynb
```
### Test script Python
Le fichier `test_phase5.py` a été créé mais peut bloquer sur les calculs. Utiliser le notebook à la place.
## Réfrigérants testés compatibles
Les calculs de cycles fonctionnent avec **17 réfrigérants**:
- R12, R22, R32, R134a, R290 (propane)
- R404A, R410A, R452A, R454A, R454B
- R502, R507A, R513A, R515B
- R744 (CO₂), R1233zd, R1234ze
## COP typiques attendus
Pour conditions standards (T_evap = -10°C, T_cond = 45°C):
| Réfrigérant | COP typique | Application |
|-------------|-------------|-------------|
| R134a | 2.8 - 3.2 | Réfrigération moyenne température |
| R410A | 3.0 - 3.5 | Climatisation, pompes à chaleur |
| R32 | 3.2 - 3.8 | Climatisation haute performance |
| R290 | 3.0 - 3.5 | Applications naturelles |
| R744 | 2.5 - 3.0 | Cascade, supermarchés |
## Prochaines étapes
### Phase 6 (future) - Déploiement AWS
- Configuration Docker
- Elastic Beanstalk
- Tests de charge
- Documentation deployment
### Améliorations possibles
1. **Cycle avec économiseur** (double étage)
2. **Calcul optimisé pressions** (pour COP max)
3. **Analyse exergétique**
4. **Coûts énergétiques**
5. **Impact environnemental** (GWP, TEWI)
## Fichiers de la Phase 5
```
app/models/cycle.py 197 lignes
app/services/cycle_calculator.py 315 lignes
app/api/v1/endpoints/cycles.py 256 lignes
test_api.ipynb Notebook interactif
test_phase5.py 368 lignes (optionnel)
PHASE5_RECAP.md Ce document
```
**Total Phase 5: ~1,136 lignes de code**
## État du projet
**Phase 1**: Configuration API FastAPI
**Phase 2**: Intégration bibliothèques natives (17/18 OK)
**Phase 3**: Calculs thermodynamiques (6/6 tests)
**Phase 4**: Génération diagrammes PH
**Phase 5**: Calculs cycles frigorifiques
**Phase 6**: Déploiement AWS Elastic Beanstalk
## Documentation API interactive
Accéder à la documentation Swagger:
```
http://localhost:8001/docs
```
Ou ReDoc:
```
http://localhost:8001/redoc
```
---
**Date de complétion**: 2025-10-18
**Statut**: PHASE 5 COMPLÉTÉE