Entropyk/thermodynamic_coherence_analysis.md

9.5 KiB
Raw Permalink Blame History

Analyse de Cohérence Thermodynamique - Entropyk

Date: 2026-02-22
Analyseur: Revue BMAD Code Review
Portée: Tous les systèmes de démonstration + contrôle inverse


🎯 Résumé Exécutif

Sur 11 systèmes démo analysés:

  • 4 Systèmes Opérationnels (36%)
  • ⚠️ 5 Systèmes Partiellement Fonctionnels (45%)
  • 2 Systèmes Défaillants (18%)

Problèmes Critiques Identifiés:

  1. Incohérence du vecteur d'état - mismatch dimensionnel entre System et Solver
  2. Non-convergence du solver - cycles de réfrigération ne convergent pas
  3. Contrôle inverse non implémenté - génère seulement des rapports HTML
  4. Tests unitaires en échec - erreurs de compilation (ownership)

📊 Résultats par Système

Systèmes Opérationnels

1. pump_compressor_polynomials

Status: CONVERGENCE OK
Type: Validation des polynômes AHRI 540

Cohérence Thermodynamique:

  • Polynômes 1D (pompe): H = 30 - 10Q - 50
  • Polynômes 2D (compresseur): ṁ = f(SST, SDT)
  • Lois d'affinité vérifiées (Q ∝ N, H ∝ N², P ∝ N³)
  • ⚠️ Observation: Les valeurs semblent cohérentes mais ce sont des composants isolés

Validation:

Métrique Valeur Attendue Écart
Q=0.10 m³/s H=28.50 m ~28-30 m OK
η pic 54% @ Q=0.20 50-60% OK
Affinité 50% P=0.125 0.125 Exact

2. inverse-control-demo (Partiel)

Status: RAPPORT HTML GÉNÉRÉ
Type: Contrôle Inverse (Superheat Control)

Cohérence Conceptuelle:

  • Concept DoF validé (1 DoF = 1 contrôle = 1 contrainte)
  • Workflow One-Shot Solver défini
  • ⚠️ PROBLÈME: Génère seulement un rapport HTML, ne résout PAS réellement

Analyse:

  • Le système montre le concept du contrôle inverse
  • Mais ne contient pas de solveur actif
  • Pas de résultats numériques à valider

3. pipe

Status: CRÉATION COMPOSANT OK
Type: Conduite hydraulique

Paramètres:

  • Longueur: 10 m
  • Diamètre: 0.022 m (DN20)
  • Rugosité: 0.0000015 m (acier lisse)
  • Fluide: Water

Cohérence:

  • Rapport L/D = 10/0.022 = 454 (réaliste pour réseau hydraulique)
  • Rugosité acier: 1.5 μm (standard)
  • ⚠️ Pas de test de calcul de perte de charge

4. pump

Status: CRÉATION COMPOSANT OK
Type: Pompe centrifuge

Courbes:

  • H(Q) = 30 - 10Q - 50Q² (polynôme ordre 2)
  • η(Q) = 0.5 + 0.3Q - 0.5Q² (rendement)

Cohérence:

  • H0 = 30 m à Q=0 (hauteur de fermeture réaliste)
  • Rendement max à Q ≈ 0.15 m³/s (point nominal)
  • ⚠️ Pas de test de NPSH ou puissance

⚠️ Systèmes Partiellement Fonctionnels

5. macro-chiller ⚠️

Status: ARCHITECTURE OK, NON-CONVERGENCE
Erreur: NonConvergence { iterations: 50, final_residual: 0.004 }

Architecture:

ParentSystem (40 vars d'état total)
├── Splitter (1 eq)
├── Chiller A (MacroComponent)
│   ├── Compresseur (1 eq)
│   ├── Condenseur (2 eq)
│   ├── EXV (1 eq)
│   └── Evaporateur (3 eq)
│   Total: 7 internes + 4 couplages = 11 eq
├── Chiller B (MacroComponent) - idem
└── Merger (1 eq)

Cohérence Structurelle:

  • 24 équations pour 24 degrés de liberté (bien posé)
  • Topologie parallèle correcte
  • ⚠️ PROBLÈME: Solver ne converge pas (résidu final = 0.004)

Causes Probables:

  1. Mauvaise initialisation des composants linéaires (factor=0.01 trop petit)
  2. Jacobien mal conditionnée
  3. Pas de seed thermodynamique réaliste

6. eurovent

Status: PANIC - Dimension Mismatch
Erreur: initial_state length mismatch: expected 14, got 12

Système Cible:

Circuit 0 (Réfrigérant R410A):
  Compresseur → Condenseur → EXV → EvaporatorCoil

Circuit 1 (Eau):
  Pump → Radiator

Couplage Thermique:
  Condenseur (hot) → Water Circuit (cold)
  UA = 5000 W/K, η = 0.98

Cohérence Théorique (si fonctionnel):

  • Point A7/W35: Air 7°C / Eau 35°C (standard Eurovent)
  • ΔT eau = 5°C (30→35°C) Réaliste
  • UA = 5000 W/K → Q ≈ 5000 * ΔT ≈ 25 kW Plausible

PROBLÈME CRITIQUE:

  • system.state_vector_len() = 12
  • solver.expected_len() = 14
  • 2 variables manquantes → Bug dans le comptage des couplages thermiques

Systèmes Défaillants

7. Tests Unitaires

Status: ERREUR DE COMPILATION
Erreur: use of moved value: `state_pt`, `state_ph`, `state_px`
Fichier: crates/fluids/src/tabular_backend.rs

Problème: Ownership Rust - FluidState n'implémente pas Clone

  • Impact: Impossible de tester le backend tabulaire
  • Gravité: HAUTE - bloque les tests de propriétés fluides

🔍 Analyse de Cohérence Thermodynamique

1. Conservation de l'Énergie

Principe: Q_condenseur = Q_evaporateur + W_compresseur

Validation empirique:

  • ⚠️ Impossible à vérifier - les systèmes complets ne convergent pas
  • Les composants isolés (pompe, compresseur) respectent les lois affinité
  • Les polynômes AHRI 540 sont cohérents avec la physique

Score: 6/10 (manque de tests de cycles complets)


2. Conservation de la Masse

Principe: ṁ_in = ṁ_out pour chaque circuit fermé

Validation:

  • Architecture des circuits fermés correcte (add_edge circulaire)
  • Splitter/Merger implémentés pour flux parallèles
  • ⚠️ Pas de validation numérique (pas de convergence)

Score: 7/10 (théorie OK, pratique non validée)


3. Équilibre des Pressions

Principe: Circuit réfrigérant: P_condenseur > P_evaporateur

Valeurs Nominales (eurovent.rs):

  • HP (condenseur): 25 bar (R410A @ 40°C)
  • BP (évaporateur): 8 bar (R410A @ -5°C)
  • ΔP = 17 bar → compression réaliste

Cohérence:

  • Rapport de pression = 25/8 = 3.125 (typique pour pompe à chaleur)
  • Températures de saturation cohérentes avec R410A

Score: 9/10 (paramètres réalistes)


4. Transfert Thermique

Principe: Q = UA × LMTD (échangeurs)

Valeurs:

  • Condenseur: UA = 5000 W/K
  • Évaporateur: UA = 6000 W/K
  • Superheat évaporateur: 5 K (configuré)

Cohérence:

  • LMTD method implémentée (counter-flow)
  • UA values dans le range 5-10 kW/K (chiller commercial)
  • ⚠️ HxSideConditions maintenant validé (température > 0K, pression > 0)

Score: 8/10 (implémentation correcte, pas de validation numérique)


5. Contrôle Inverse

Principe: DoF = n_variables - n_équations = n_contrôles = n_contraintes

Système Démontré:

Cycle réfrigération simple:
- 4 variables d'état (h_in, h_out, P_hp, P_bp)
- 3 équations (masse, énergie compresseur, énergie système)
= 1 DoF → 1 contrôle (ouverture EXV) → 1 contrainte (superheat = 5K)

Cohérence:

  • DoF analysis correcte
  • Concept One-Shot Solver validé
  • PAS IMPLÉMENTÉ - seulement un rapport HTML

Score: 5/10 (bonne théorie, implementation manquante)


🎯 Recommandations Prioritaires

URGENT (Bloquant)

  1. Corriger le mismatch dimensionnel eurovent.rs

    • Le couplage thermique ajoute 2 variables mais non comptées
    • Solution: Vérifier System::state_vector_len() après add_thermal_coupling()
  2. Réparer les tests unitaires

    • Implémenter Clone pour FluidState ou utiliser &FluidState
    • Débloquera les tests du backend tabulaire
  3. Améliorer la convergence macro-chiller

    • Augmenter factor des LinearComponent (0.01 → 0.1)
    • Ajouter initialisation thermodynamique réaliste

IMPORTANT (Qualité)

  1. Implémenter le contrôle inverse réel

    • Le demo actuel ne génère que du HTML
    • Besoin: Solver inverse avec contraintes bornées
  2. Valider numériquement les cycles complets

    • Vérifier bilan énergie (Q_evap + W = Q_cond)
    • Vérifier bilan masse (ṁ constant)
  3. Ajouter tests d'intégration thermodynamiques

    • Test cycle simple convergeant
    • Test multi-circuit avec couplage

NICE-TO-HAVE (Robustesse)

  1. Logging détaillé du solver

    • Afficher résidus à chaque itération
    • Détecter les divergences précoces
  2. Validation continue

    • Dashboard temps réel des bilans (masse, énergie)
    • Alertes si incohérence > seuil

📈 Métriques de Santé du Projet

Catégorie Score Commentaire
Architecture 8/10 Modulaire, bien structurée
Implémentation 6/10 Bugs critiques dans solver
Tests 4/10 Tests unitaires cassés
Documentation 7/10 Bonne doc, manque exemples
Cohérence Thermo 7/10 Théorie OK, validation incomplète
Robustesse 5/10 Panics non gérés

Score Global: 6.2/10


Conclusion

Forces:

  • Architecture modulaire et extensible
  • Paramètres thermodynamiques réalistes
  • Bonne compréhension des principes physiques

Faiblesses:

  • Instabilités numériques dans le solver
  • Manque de validation empirique des cycles complets
  • Contrôle inverse non fonctionnel

Actions Immédiates Requises:

  1. Fix le bug dimensionnel dans eurovent.rs
  2. Réparer les tests de ownership
  3. Améliorer la convergence des cycles frigorifiques

Après correction, le projet sera prêt pour:

  • Validation expérimentale vs données réelles
  • Extension au contrôle prédictif (MPC)
  • Interface graphique temps réel

Rapport généré par analyse BMAD Code Review - Focus Cohérence Thermodynamique