413 lines
9.2 KiB
Markdown
413 lines
9.2 KiB
Markdown
# Components Reference
|
||
|
||
This document describes all available thermodynamic components in Entropyk, their equations, and usage examples.
|
||
|
||
## Component Categories
|
||
|
||
| Category | Purpose | Components |
|
||
|----------|---------|------------|
|
||
| **Active** | Add work to fluid | Compressor, Pump, Fan |
|
||
| **Passive** | Pressure drop, no work | Pipe, ExpansionValve |
|
||
| **Heat Transfer** | Exchange heat between fluids | Evaporator, Condenser, Economizer, HeatExchanger |
|
||
| **Boundary** | Fixed conditions | FlowSource, FlowSink |
|
||
| **Junction** | Flow splitting/merging | FlowSplitter, FlowMerger |
|
||
|
||
---
|
||
|
||
## Active Components
|
||
|
||
### Compressor
|
||
|
||
A positive displacement compressor using the AHRI 540 performance model.
|
||
|
||
**Equations (2)**:
|
||
- Mass flow: `ṁ = M1 × (1 - (P_suc/P_dis)^(1/M2)) × ρ_suc × V_disp × N/60`
|
||
- Power: `Ẇ = M3 + M4 × (P_dis/P_suc) + M5 × T_suc + M6 × T_dis`
|
||
|
||
**Ports**: 2 (inlet, outlet)
|
||
|
||
```rust
|
||
use entropyk_components::compressor::{Compressor, Ahri540Coefficients};
|
||
use entropyk_components::port::{FluidId, Port};
|
||
use entropyk_core::{Pressure, Enthalpy};
|
||
|
||
// Create with AHRI 540 coefficients
|
||
let coeffs = Ahri540Coefficients::new(
|
||
0.85, 2.5, // M1, M2 (flow)
|
||
500.0, 1500.0, -2.5, 1.8, // M3-M6 (cooling power)
|
||
600.0, 1600.0, -3.0, 2.0 // M7-M10 (heating power)
|
||
);
|
||
|
||
// Create disconnected ports
|
||
let inlet = Port::new(
|
||
FluidId::new("R134a"),
|
||
Pressure::from_bar(3.5),
|
||
Enthalpy::from_kj_per_kg(405.0),
|
||
);
|
||
let outlet = Port::new(
|
||
FluidId::new("R134a"),
|
||
Pressure::from_bar(12.0),
|
||
Enthalpy::from_kj_per_kg(440.0),
|
||
);
|
||
|
||
// Build compressor
|
||
let compressor = Compressor::new(
|
||
coeffs,
|
||
2900.0, // speed_rpm
|
||
0.0001, // displacement m³/rev
|
||
inlet,
|
||
outlet,
|
||
)?;
|
||
```
|
||
|
||
**Calibration**: `f_m` (mass flow), `f_power` (power), `f_etav` (volumetric efficiency)
|
||
|
||
---
|
||
|
||
### Pump
|
||
|
||
A centrifugal pump for incompressible fluids (water, brine, glycol).
|
||
|
||
**Equations (2)**:
|
||
- Pressure rise: `ΔP = f_head × ρ × g × H_curve(Q)`
|
||
- Power: `Ẇ = ρ × g × Q × H / η`
|
||
|
||
**Ports**: 2 (inlet, outlet)
|
||
|
||
```rust
|
||
use entropyk_components::pump::Pump;
|
||
use entropyk_components::port::{FluidId, Port};
|
||
use entropyk_core::{Pressure, Enthalpy};
|
||
|
||
let inlet = Port::new(
|
||
FluidId::new("Water"),
|
||
Pressure::from_bar(1.0),
|
||
Enthalpy::from_kj_per_kg(63.0), // ~15°C
|
||
);
|
||
let outlet = Port::new(
|
||
FluidId::new("Water"),
|
||
Pressure::from_bar(3.0),
|
||
Enthalpy::from_kj_per_kg(63.0),
|
||
);
|
||
|
||
let pump = Pump::new(
|
||
"Chilled Water Pump",
|
||
inlet,
|
||
outlet,
|
||
0.5, // design flow rate kg/s
|
||
200.0, // design head kPa
|
||
)?;
|
||
```
|
||
|
||
---
|
||
|
||
### Fan
|
||
|
||
An air-moving device for condenser cooling or ventilation.
|
||
|
||
**Equations (2)**:
|
||
- Pressure rise: `ΔP = fan_curve(Q, N)`
|
||
- Power: `Ẇ = Q × ΔP / η`
|
||
|
||
**Ports**: 2 (inlet, outlet)
|
||
|
||
```rust
|
||
use entropyk_components::fan::Fan;
|
||
|
||
let fan = Fan::new(
|
||
"Condenser Fan",
|
||
inlet_port,
|
||
outlet_port,
|
||
2.0, // design flow m³/s
|
||
150.0, // design static pressure Pa
|
||
)?;
|
||
```
|
||
|
||
---
|
||
|
||
## Passive Components
|
||
|
||
### Pipe
|
||
|
||
A fluid transport pipe with Darcy-Weisbach pressure drop.
|
||
|
||
**Equations (1)**:
|
||
- Pressure drop: `ΔP = f × (L/D) × (ρ × v² / 2)`
|
||
|
||
**Ports**: 2 (inlet, outlet)
|
||
|
||
```rust
|
||
use entropyk_components::pipe::{Pipe, PipeGeometry, roughness};
|
||
|
||
let geometry = PipeGeometry::new(
|
||
10.0, // length m
|
||
0.025, // inner diameter m
|
||
roughness::SMOOTH, // roughness m
|
||
)?;
|
||
|
||
let pipe = Pipe::for_incompressible(
|
||
geometry,
|
||
inlet_port,
|
||
outlet_port,
|
||
998.0, // density kg/m³
|
||
0.001, // viscosity Pa·s
|
||
)?;
|
||
```
|
||
|
||
---
|
||
|
||
### Expansion Valve
|
||
|
||
A thermostatic or electronic expansion valve for refrigerant systems.
|
||
|
||
**Equations (1)**:
|
||
- Mass flow: `ṁ = C_v × opening × √(ρ × ΔP)`
|
||
|
||
**Ports**: 2 (inlet, outlet)
|
||
|
||
```rust
|
||
use entropyk_components::expansion_valve::ExpansionValve;
|
||
|
||
let valve = ExpansionValve::new(
|
||
FluidId::new("R134a"),
|
||
0.8, // opening (0-1)
|
||
inlet_port,
|
||
outlet_port,
|
||
)?;
|
||
```
|
||
|
||
---
|
||
|
||
## Heat Transfer Components
|
||
|
||
### Heat Exchanger Architecture
|
||
|
||
All heat exchangers have **4 ports**:
|
||
|
||
```
|
||
Hot Side:
|
||
Inlet ─────►┌──────────┐──────► Outlet
|
||
│ HX │
|
||
Cold Side: │ │
|
||
Inlet ─────►└──────────┘──────► Outlet
|
||
```
|
||
|
||
| Component | Hot Side | Cold Side | Model |
|
||
|-----------|----------|-----------|-------|
|
||
| Condenser | Refrigerant (condensing) | Water/Air | LMTD |
|
||
| Evaporator | Water/Air | Refrigerant (evaporating) | ε-NTU |
|
||
| Economizer | Hot refrigerant | Cold refrigerant | ε-NTU |
|
||
|
||
---
|
||
|
||
### Condenser
|
||
|
||
A heat exchanger where refrigerant condenses from vapor to liquid.
|
||
|
||
**Equations (3)**:
|
||
- Hot side energy: `Q_hot = ṁ_hot × (h_in - h_out)`
|
||
- Cold side energy: `Q_cold = ṁ_cold × Cp × (T_out - T_in)`
|
||
- Heat transfer: `Q = UA × LMTD`
|
||
|
||
**Ports**: 4 (hot_in, hot_out, cold_in, cold_out)
|
||
|
||
```rust
|
||
use entropyk_components::heat_exchanger::Condenser;
|
||
|
||
let condenser = Condenser::new(10_000.0); // UA = 10 kW/K
|
||
|
||
// Set saturation temperature for condensation
|
||
condenser.set_saturation_temp(323.15); // 50°C
|
||
|
||
// Calibration for matching real data
|
||
condenser.set_calib(Calib { f_ua: 1.1, ..Default::default() });
|
||
```
|
||
|
||
**Thermodynamic Notes**:
|
||
- Refrigerant enters as superheated vapor
|
||
- Refrigerant exits as subcooled liquid
|
||
- Typical subcooling: 3-10 K
|
||
|
||
---
|
||
|
||
### Evaporator
|
||
|
||
A heat exchanger where refrigerant evaporates from liquid to vapor.
|
||
|
||
**Equations (3)**:
|
||
- Hot side energy: `Q_hot = ṁ_hot × Cp × (T_in - T_out)`
|
||
- Cold side energy: `Q_cold = ṁ_cold × (h_out - h_in)`
|
||
- Heat transfer: `Q = ε × ṁ_cold × Cp_cold × (T_hot_in - T_cold_in)`
|
||
|
||
**Ports**: 4 (hot_in, hot_out, cold_in, cold_out)
|
||
|
||
```rust
|
||
use entropyk_components::heat_exchanger::Evaporator;
|
||
|
||
let evaporator = Evaporator::new(8_000.0); // UA = 8 kW/K
|
||
|
||
// Set saturation temperature and superheat target
|
||
evaporator.set_saturation_temp(278.15); // 5°C
|
||
evaporator.set_superheat_target(5.0); // 5 K superheat
|
||
```
|
||
|
||
**Thermodynamic Notes**:
|
||
- Refrigerant enters as two-phase mixture (after expansion valve)
|
||
- Refrigerant exits as superheated vapor
|
||
- Typical superheat: 5-10 K
|
||
|
||
---
|
||
|
||
### Economizer
|
||
|
||
A heat exchanger for subcooling liquid refrigerant using expanded vapor.
|
||
|
||
**Equations (3)**: Same as generic heat exchanger
|
||
|
||
**Ports**: 4 (hot_in, hot_out, cold_in, cold_out)
|
||
|
||
```rust
|
||
use entropyk_components::heat_exchanger::Economizer;
|
||
|
||
let economizer = Economizer::new(2_000.0); // UA = 2 kW/K
|
||
```
|
||
|
||
---
|
||
|
||
## Boundary Components
|
||
|
||
### FlowSource
|
||
|
||
Imposes fixed pressure and enthalpy at circuit inlet.
|
||
|
||
**Equations (2)**:
|
||
- `r_P = P_edge - P_set = 0`
|
||
- `r_h = h_edge - h_set = 0`
|
||
|
||
**Ports**: 1 (outlet only)
|
||
|
||
```rust
|
||
use entropyk_components::flow_boundary::FlowSource;
|
||
|
||
// City water supply: 3 bar, 15°C
|
||
let source = FlowSource::incompressible(
|
||
"Water",
|
||
3.0e5, // pressure Pa
|
||
63_000.0, // enthalpy J/kg (~15°C)
|
||
connected_port,
|
||
)?;
|
||
|
||
// Refrigerant reservoir: 12 bar, 40°C subcooled
|
||
let source = FlowSource::compressible(
|
||
"R134a",
|
||
12.0e5, // pressure Pa
|
||
250_000.0, // enthalpy J/kg (subcooled liquid)
|
||
connected_port,
|
||
)?;
|
||
```
|
||
|
||
---
|
||
|
||
### FlowSink
|
||
|
||
Imposes back-pressure at circuit outlet.
|
||
|
||
**Equations (1-2)**:
|
||
- `r_P = P_edge - P_back = 0`
|
||
- Optional: `r_h = h_edge - h_back = 0`
|
||
|
||
**Ports**: 1 (inlet only)
|
||
|
||
```rust
|
||
use entropyk_components::flow_boundary::FlowSink;
|
||
|
||
// Return header with back-pressure
|
||
let sink = FlowSink::incompressible(
|
||
"Water",
|
||
1.5e5, // back-pressure Pa
|
||
None, // no fixed enthalpy
|
||
connected_port,
|
||
)?;
|
||
|
||
// With fixed return temperature
|
||
let sink = FlowSink::incompressible(
|
||
"Water",
|
||
1.5e5,
|
||
Some(84_000.0), // fixed enthalpy (~20°C)
|
||
connected_port,
|
||
)?;
|
||
```
|
||
|
||
---
|
||
|
||
## Junction Components
|
||
|
||
### FlowSplitter
|
||
|
||
Divides one inlet flow into multiple outlets.
|
||
|
||
**Equations (N_outlets)**:
|
||
- Mass conservation: `ṁ_in = Σ ṁ_out`
|
||
- Pressure equality at all outlets
|
||
|
||
**Ports**: 1 inlet + N outlets
|
||
|
||
```rust
|
||
use entropyk_components::flow_junction::FlowSplitter;
|
||
|
||
let splitter = FlowSplitter::new(
|
||
"Chilled Water Splitter",
|
||
inlet_port,
|
||
vec![outlet1, outlet2, outlet3],
|
||
)?;
|
||
```
|
||
|
||
---
|
||
|
||
### FlowMerger
|
||
|
||
Combines multiple inlet flows into one outlet.
|
||
|
||
**Equations (N_inlets)**:
|
||
- Mass conservation: `Σ ṁ_in = ṁ_out`
|
||
- Enthalpy mixing: `h_out = Σ(ṁ_in × h_in) / ṁ_out`
|
||
|
||
**Ports**: N inlets + 1 outlet
|
||
|
||
```rust
|
||
use entropyk_components::flow_junction::FlowMerger;
|
||
|
||
let merger = FlowMerger::new(
|
||
"Return Water Merger",
|
||
vec![inlet1, inlet2, inlet3],
|
||
outlet_port,
|
||
)?;
|
||
```
|
||
|
||
---
|
||
|
||
## Component Summary Table
|
||
|
||
| Component | Equations | Ports | Calibration |
|
||
|-----------|-----------|-------|-------------|
|
||
| Compressor | 2 | 2 | f_m, f_power, f_etav |
|
||
| Pump | 2 | 2 | f_m, f_power |
|
||
| Fan | 2 | 2 | f_m, f_power |
|
||
| Pipe | 1 | 2 | f_dp |
|
||
| ExpansionValve | 1 | 2 | f_m |
|
||
| Condenser | 3 | 4 | f_ua, f_dp |
|
||
| Evaporator | 3 | 4 | f_ua, f_dp |
|
||
| Economizer | 3 | 4 | f_ua, f_dp |
|
||
| FlowSource | 2 | 1 | - |
|
||
| FlowSink | 1-2 | 1 | - |
|
||
| FlowSplitter | N | 1+N | - |
|
||
| FlowMerger | N | N+1 | - |
|
||
|
||
---
|
||
|
||
## Next Steps
|
||
|
||
- See [Building Systems](./04-building-systems.md) for connecting components
|
||
- Learn about [Refrigeration Cycles](./06-refrigeration-cycles.md) for complete examples
|
||
- Explore [Calibration](./10-calibration.md) for matching real data
|