# 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 / Longo–Shah 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** l’ouverture EXV (contrôle). ### Calibration `z_ua = 1` par défaut. Fixed SST + Z_UA libre pour calage. ### Ports / JSON Voir EN.