Files
Entropyk/docs/components/evaporator.md
sepehr 5bd180b5b8
Some checks failed
CI / check (push) Has been cancelled
Snapshot WIP: solver HP epic progress, BPHX/HX physics, BMAD skill refresh.
Capture uncommitted solver robustness work (regularization, domain errors, linear solver lifecycle, tube DP/MSH), web workbench updates, and synced BMAD skills across IDE agent folders before starting BPHX pressure-drop.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-19 16:35:31 +02:00

124 lines
3.4 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.
# Evaporator / EvaporatorCoil
Config types: `"Evaporator"`, `"EvaporatorCoil"`
Source: `crates/components/src/heat_exchanger/evaporator.rs`
---
## EN
### Purpose & physical model
**DX (direct-expansion)** evaporator: refrigerant outlet is **superheated vapor** (not flooded two-phase). Phase-change ε-NTU against a hot secondary stream:
```
ε = 1 exp(UA / C_sec)
Q = ε · C_sec · (T_sec,in T_evap(P)) # heat absorbed by refrigerant
```
- Optional refrigerant ΔP = k·ṁ·|ṁ|
- `EvaporatorCoil` locks secondary side to **Air**
- **No plate correlation** (see BPHX / LongoShah for geometry-based UA)
Difference vs `FloodedEvaporator`: DX uses **superheat closure** (or regulated SH); flooded uses **saturated vapor** (or quality) by default.
### Dual secondary modes (Newton)
| Mode | Secondary | `n_secondary` |
|------|-----------|---------------|
| **System** | Live `secondary_inlet` / `secondary_outlet` | 1 or 2 |
| **Rating** | Scalars T_sec + C_sec (ṁ·cp) | 0 |
`coupled_ready` = refrigerant ready **and** (live edges **or** rating scalars).
`live_secondary_stream` = edges first, else rating scalars.
### Residuals & `n_equations()` (coupled emergent)
| Row | Equation |
|-----|----------|
| r0 | `P_out (P_in ΔP)` (optional skip) |
| r1 | `ṁ · (h_out h_in) Q` |
| r2 | `h_out h(P, T_evap+SH)` if superheat is imposed |
| r_mass | dropped if same-branch |
| r_sec | live secondary mass/energy if edges |
```
n_thermo = base (1 or 2) + 1 if imposes_superheat()
n_equations = n_thermo + mass? + n_secondary
```
### Superheat regulation (DoF)
| Setting | Effect |
|---------|--------|
| Default | SH residual active (`superheat_k` target) when emergent |
| `superheat_regulated: true` | **Drops** SH residual (1 eq) |
If SH residual is dropped, pair with a **free** EXV opening (and usually a control loop) so the system stays square. CLI DoF gate enforces balance.
### Ports
| Port | Index |
|------|-------|
| `inlet` / `outlet` | 0 / 1 refrigerant |
| `secondary_inlet` / `secondary_outlet` | 2 / 3 secondary |
### Calibration
| Factor | Default | Notes |
|--------|---------|-------|
| `z_ua` | **1.0** | UA scale |
| `z_dp` | 1.0 | ΔP scale |
UI Fixed: SST (`saturationTemperature`) + free `z_ua` for inverse calib.
### JSON parameters (main)
| Key | Meaning | Default |
|-----|---------|---------|
| `ua` | UA [W/K] | required |
| `emergent_pressure` | free P_evap | false |
| `superheat_k` | SH target [K] | 5 |
| `superheat_regulated` | drop SH residual | false |
| `secondary_fluid` / `secondary_*` | system edges or rating | |
| `skip_pressure_eq` | drop ΔP residual | false |
### energy_transfers
Coupled: `Q = ṁ·(h_out h_in)` as positive heat (cooling capacity).
### Zero flow
Smooth `|ṁ|` for live `C_sec`; no silent mass-index→pressure fallback.
---
## FR
### But & modèle
Évaporateur **DX** (sortie **surchauffée**). Duty ε-NTU :
```
Q = ε · C_sec · (T_sec,in T_evap(P))
```
Différence avec **FloodedEvaporator** : clôture **superheat**, pas vapeur saturée noyée.
### Modes secondaire
- **Système :** ports live
- **Rating :** scalaires T + ṁ·cp **dans le Newton**
### Régulation de surchauffe
`superheat_regulated: true` enlève le résidu SH → **libérer** louverture EXV (contrôle).
### Calibration
`z_ua = 1` par défaut. Fixed SST + Z_UA libre pour calage.
### Ports / JSON
Voir EN.