Files
Entropyk/apps/web/public/docs/components/condenser.md
sepehr 3358b74342 Add diagram workbench UI with Modelica DoF coaching and ISO glyphs.
Ship the Next.js cycle editor with CAD chrome, technical HX symbols, Fixed/Free boundary guidance, and secondary water/air pressure drop support in the solver stack.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-17 22:46:46 +02:00

125 lines
3.9 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.
# Condenser / CondenserCoil
Config types: `"Condenser"`, `"CondenserCoil"`
Source: `crates/components/src/heat_exchanger/condenser.rs`
---
## EN
### Purpose & physical model
Refrigerant **condenser** rejecting heat to a secondary stream (water/glycol or air). Coupled duty is **phase-change ε-NTU** (isothermal refrigerant side at `T_cond(P)`):
```
ε = 1 exp(UA_eff / C_sec)
Q = ε · C_sec · (T_cond(P_in) T_sec,in) # heat rejected by refrigerant
```
- Optional lumped refrigerant ΔP: `ΔP = k · ṁ · |ṁ|`
- `CondenserCoil` locks secondary side to **Air** conventions
- **No plate correlation** here (see BPHX for Longo/Shah geometry UA)
`UA_eff` can be reduced by flooded-level actuator; `C_sec` can be scaled by fan speed φ when fan head-pressure is active.
### Dual secondary modes (Newton)
| Mode | Secondary source | `n_secondary` |
|------|------------------|---------------|
| **System** | Live edges ports 2/3 (`secondary_inlet` / `secondary_outlet`) | 1 or 2 |
| **Rating** | Scalars `secondary_inlet_temp_*` + capacity rate / ṁ·cp | 0 |
`coupled_ready` requires refrigerant indices **and** (live edges **or** rating scalars).
`live_secondary_stream` prefers edges; falls back to rating scalars (with fan φ scaling of `C_sec` when applicable).
### Residuals & `n_equations()` (coupled)
| Row | Equation |
|-----|----------|
| r0 | `P_out (P_in ΔP)` (skippable) |
| r1 | `ṁ · (h_in h_out) Q` |
| r2 (emergent) | `h_out h(P, T_cond SC)` subcooling closure |
| r_mass | `ṁ_out ṁ_in` if not same-branch |
| r_head (optional) | `T_cond T_target` (fan **or** flooded head-pressure) |
| r_sec | live secondary mass/energy only if edges present |
```
n_equations = n_thermo + (mass?) + (head?) + n_secondary
n_thermo = 2 normally, 3 with emergent_pressure (+ subcooling residual)
```
### Emergent pressure & actuators
- `emergent_pressure: true` + `subcooling_k` → condensing pressure is **solved**, not fixed by design T
- **Fan head-pressure:** free φ scales `C_sec = φ · C_nominal`; residual pins `T_cond`
- **Flooded head-pressure:** free level λ scales `UA_eff`; mutually exclusive with fan
### Ports
| Port | Index |
|------|-------|
| `inlet` / `outlet` | 0 / 1 refrigerant |
| `secondary_inlet` / `secondary_outlet` | 2 / 3 secondary |
System wiring: Source → secondary_in → secondary_out → Sink.
### Calibration
| Factor | Meaning | Default |
|--------|---------|---------|
| `z_ua` | UA scale | **1.0** |
| `z_dp` | ΔP scale | 1.0 |
| `z_flow` / `z_power` / `z_etav` | via shared Calib API | 1.0 |
UI: Fixed on SDT target + free `z_ua` for inverse calibration.
### JSON parameters (main)
| Key | Meaning | Default |
|-----|---------|---------|
| `ua` | UA [W/K] | required |
| `emergent_pressure` | free P_cond | false |
| `subcooling_k` | outlet SC [K] | 5 |
| `secondary_fluid` | Water / Air / … | |
| `secondary_inlet_temp_c` / mass_flow / cp | rating stream | |
| `pressure_drop_coeff` | k for ΔP | |
| `fan_head_pressure_target_c` | fan control | |
| `flooded_head_pressure_target_c` | level control | |
| `skip_pressure_eq` | drop r0 | false |
### Zero flow
Live `C_sec` uses `smooth_mass_magnitude(|ṁ|)`. Mass-flow index never remapped to a pressure column.
---
## FR
### But & modèle
Condenseur frigo → secondaire (eau/air). Duty **ε-NTU** :
```
Q = ε · C_sec · (T_cond(P) T_sec,in)
```
Pas de corrélation plaques (voir BPHX). UA global ± actionneurs fan/niveau.
### Modes secondaire
- **Système :** ports live Source/Sink
- **Rating :** scalaires T + ṁ·cp **dans le Newton** (pas seulement `rate()`)
### Pression émergente
`emergent_pressure` + sous-refroidissement : `P_cond` est **calculée**.
Fan ou flooded head-pressure = +1 actionneur libre.
### Calibration
`z_ua = 1` par défaut. Imposer SDT + libérer Z_UA pour caler le condenseur.
### Ports / JSON
Voir tableaux EN.