docs: rewrite README section 5 and solver loop in plain French, define residual/jacobian, drop edge jargon

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-18 00:19:34 +02:00
parent f4c104b255
commit 329be3856f

View File

@@ -76,7 +76,7 @@ cargo run -p entropyk-cli -- run \
--output result.json
```
Sortie console : statut (converged / non-converged / timeout), résidu final, nombre d'itérations, temps de calcul, équilibre DoF, états des arêtes (pression en bar, enthalpie en kJ/kg) et performances (puissance frigorifique, puissance absorbée, COP).
Sortie console : statut (converged / non-converged / timeout), résidu final, nombre d'itérations, temps de calcul, équilibre DoF, états des tronçons (pression en bar, enthalpie en kJ/kg) et performances (puissance frigorifique, puissance absorbée, COP).
---
@@ -111,7 +111,7 @@ Config JSON / SystemBuilder / UI web
create_component -> System (graphe)
|
v
finalize() + porte DoF -> vecteur d'état [débit, pression, enthalpie] par arête
finalize() + porte DoF -> vecteur d'état [débit, pression, enthalpie] par tronçon
|
v
Newton / Picard / fallback
@@ -124,17 +124,23 @@ Config JSON / SystemBuilder / UI web
## 5. Le modèle : composants et câblage
### Vecteur d'état
### Ce que le solveur cherche
Chaque **arête** du graphe (une liaison entre deux ports) porte trois inconnues :
Pour chaque tuyau reliant deux composants, le solveur doit trouver trois valeurs :
| Rang | Grandeur | Unité SI |
|------|----------|----------|
| 0 | débit massique ṁ | kg/s |
| 1 | pression P | Pa |
| 2 | enthalpie massique h | J/kg |
| Grandeur | Unité SI | Sens |
|----------|----------|------|
| débit massique ṁ | kg/s | combien de frigorigène circule |
| pression P | Pa | pression régnant dans ce tronçon |
| enthalpie massique h | J/kg | énergie portée par le fluide |
Sur une branche série (un composant à une entrée et une sortie), les arêtes partagent généralement le **même débit** ṁ : le solveur fusionne alors ces inconnues et réduit la taille du système.
Ces trois valeurs sont les **inconnues** du système. Le moteur en assemble une liste (le « vecteur d'état ») et cherche les valeurs qui annulent toutes les équations en même temps.
### Une seule variable de débit pour toute la boucle
Dans un cycle simple, les composants sont branchés en boucle les uns derrière les autres, sans bifurcation : le frigorigène qui sort du compresseur entre intégralement dans le condenseur, puis dans le détendeur, puis dans l'évaporateur, puis revient au compresseur. Le débit est donc **le même partout dans la boucle**.
Plutôt que d'avoir une variable de débit par tuyau, le solveur en utilise **une seule pour toute la boucle**. Cela réduit le nombre d'inconnues et accélère la résolution. (S'il y a un branchement — débit qui se partage entre deux circuits — alors chaque branche reçoit sa propre variable de débit.)
### Câblage
@@ -144,7 +150,8 @@ Les liaisons s'écrivent `nom:port`. Par exemple :
{ "from": "comp:outlet", "to": "cond:inlet" }
```
Le moteur construit le graphe, attribue un index à chaque inconnue d'arête, puis assemble résidus et jacobienne.
Le moteur construit le graphe à partir de ces liaisons, puis assemble les équations de chaque composant et leurs dérivées.
---
@@ -181,6 +188,8 @@ Tolérance typique : `1e-6`. Itérations : `300` par défaut ; à augmenter pour
### Boucle de résolution
Un **résidu** est l'écart entre le membre gauche et le membre droit d'une équation : il vaut zéro quand l'équation est satisfaite. Le but du solveur est de rendre tous les résidus nuls en même temps. La **matrice jacobienne** est l'ensemble des dérivées des résidus par rapport aux inconnues ; elle indique dans quelle direction corriger les inconnues.
```text
1. Estimation initiale (frontières + pressions haute/basse initialisées par étages si emergent_pressure)
2. Calcul des résidus r(x) de tous les composants
@@ -446,11 +455,11 @@ cargo run -p entropyk-cli -- schema -o model-ir.schema.json
1. Lecture de `ScenarioConfig`.
2. Pour chaque composant : `create_component(...)` (CoolProp, params, modes orifice / emergent).
3. Ajout des arêtes nommées `nom:port`.
3. Ajout des liaisons nommées `nom:port`.
4. `finalize()` + contrôle DoF (système carré obligatoire).
5. Estimation initiale (frontières + pressions par étages).
6. Résolution selon `solver.strategy`.
7. Sérialisation JSON : états d'arêtes, performances, `dof`, `failure_diagnostics` en cas d'échec.
7. Sérialisation JSON : états des tronçons, performances, `dof`, `failure_diagnostics` en cas d'échec.
### Contrôles (régulation / calibration)