Refrigerant properties: pressure to saturation temperature
Provisional, 0.93 (GitHub issue #39).
A BAS or lab logger usually trends refrigerant pressures and line temperatures. The charge and
heat-transfer detectors read the saturation-referenced differences a technician takes off a gauge
set. camber.refrigerant converts the first into the second:
| Quantity | Transform | Saturation line |
|---|---|---|
| liquid subcooling | T_sat(P_liquid) - T_liquid_line |
bubble |
| suction superheat | T_suction_line - T_sat(P_suction) |
dew |
| discharge superheat | T_discharge_line - T_sat(P_discharge) |
dew |
| condenser approach | T_sat(P_discharge) - T_condenser_leaving_water |
dew |
| evaporator approach | T_chw_leaving - T_sat(P_suction) |
dew |
from camber import refrigerant as R
R.saturation_temp(118.8, "R-410A") # ~40 degF; psig by default
R.saturation_temp(830, "R-410A", pressure_unit="kPa", basis="absolute", temp_unit="C")
R.subcooling(liquid_pressure, liquid_line_temp, "R-410A") # Series in, Series out
Fluids and sources
CAMBER adds no property library. Each fluid's saturation curve is a published vapour-pressure
correlation of the Wagner form, ln(p/p_c) = (T_c/T) * sum(n_i * (1 - T/T_c)^t_i). It is evaluated
directly for p(T) and inverted by bisection for T(p).
| Fluid | Correlation |
|---|---|
| R-410A | Bubble and dew equations of Lemmon (2003), Int. J. Thermophys. 24(4):991-1006, doi:10.1023/A:1025048800563: the pseudo-pure R-410A model's own saturation lines |
| R-744 (CO₂) | Vapour-pressure equation (eq. 3.13) of Span & Wagner (1996), J. Phys. Chem. Ref. Data 25(6):1509, doi:10.1063/1.555991 |
| R-134a, R-22, R-32 | Ancillary vapour-pressure fits to the reference equations of state (Tillner-Roth & Baehr 1994; Kamei, Beyerlein & Jacobsen 1995; Tillner-Roth & Yokozeki 1997) as published in CoolProp 8.0.0 (Bell et al. 2014, doi:10.1021/ie4033999; MIT licence, credited in NOTICE) |
Accuracy. The target was ±0.5 °F across the HVAC range. On R-410A the correlation matches the NIST REFPROP saturation temperatures that NIST publishes beside the raw pressures in its residential heat-pump FDD data (doi:10.18434/M32132). Over 7,374 test points from 78 to 625 psia, the bubble line is within 0.011 °F and the dew line within 0.007 °F. The pure-fluid correlations agree with their full reference equations of state (evaluated with CoolProp) to within 0.014 °F from -40 to 150 °F. The test suite pins the NIST values and, when CoolProp is installed, repeats the CoolProp comparison. CoolProp is used only for that cross-check and is never a dependency. For comparison, a field transducer's 1 psi error at 120 psig shifts R-410A saturation by about 0.6 °F.
Gauge, absolute and altitude
CAMBER's pressure roles are gauge (psig). A dataset published in psia is converted at ingest.
basis="gauge" is therefore the default, and absolute pressure is the reading plus
STANDARD_ATM_PSIA (14.696 psia). A site well above sea level can pass its own atm_psia: at
5,000 ft the atmosphere is about 12.2 psia, and assuming 14.7 there reads R-410A saturation about
1.3 °F high at suction and 0.5 °F high at discharge.
Blends, glide and which pressure
R-410A is a near-azeotropic blend. At one pressure its bubble (saturated liquid) and dew (saturated vapour) temperatures differ by about 0.2 °F. Subcooling is referenced to the bubble point and every superheat to the dew point, which is the convention of manufacturer charging tables and of NIST's own columns. The approaches use the dew point, the compressor-rating convention for a blend's saturated temperature.
Subcooling should use the liquid-line pressure (liquid_line_pressure). Where only the
discharge pressure is trended, CAMBER uses it instead. It sits a few psi above the liquid line, so
subcooling reads slightly high, but the offset is constant and a drift detector absorbs it. Suction
pressure likewise stands in for evaporator pressure.
CO₂ is transcritical
Above its critical point (87.8 °F, 1,070 psia) CO₂ has no saturation state. A gas cooler's
pressure then has no condensing temperature, and subcooling is undefined. saturation_temp
returns NaN there, and does the same for any fluid at or above its critical pressure, below its
lowest valid temperature, or for a reading below a perfect vacuum (a dead transducer). Every
transform therefore declines row by row instead of extrapolating a curve that does not exist.
is_supercritical flags those rows.
A transcritical booster rack crosses the critical pressure routinely in warm weather. In the
ornl-supermarket-fdd CO₂ rack, the 0.89 intake found the medium-temperature discharge
supercritical in 7-12% of summer rows. The high-side transforms of an R-744 system are therefore
available only while it runs subcritical. The suction side is always subcritical.
Turning it on for equipment
Name the refrigerant on an equipment entry of a run config:
"equipment": [{"class": "CHILLER", "marker_role": "discharge_pressure", "refrigerant": "R-410A"}]
With the refrigerant named, any rule that asks for subcooling_temp, superheat_temp,
discharge_superheat_temp, cond_approach_temp or evap_approach_temp gets it derived at resolve
time (camber.refrigerant.derive_refrigerant_roles). The derivation reads the pressure roles and
the new raw-temperature roles:
| Role | Meaning |
|---|---|
liquid_line_temp |
refrigerant liquid-line temperature, °F |
suction_line_temp |
refrigerant suction-line temperature, °F |
discharge_line_temp |
compressor discharge-line temperature, °F |
liquid_line_pressure |
liquid-line refrigerant pressure, psig |
discharge_superheat_temp |
discharge superheat (a difference), °F |
A value a controller already reports is kept. From a Parquet store the derivation runs on the stored grid, before any resample. From per-point CSV folders it runs on the resampled bin means.
Validation on NIST IBAL (false alarms)
nist-ibal is a nominal 5-ton R-410A water-cooled lab chiller. It logs gauge pressures and
liquid- and suction-line RTDs, but no subcooling or superheat. Its run template now names R-410A,
so the whole refrigerant side of the chiller drift family runs: head and suction pressure,
subcooling, superheat, and the condenser and evaporator approaches. Condenser-water range runs too;
the tower approach declines because the export has no tower. On running hours the derived values
are plausible for a healthy TXV machine: subcooling about 11 °F, superheat about 7 °F, and
approaches about 9-10 °F.
The logged refrigerant leak and recharges predate the refrigerant sensors, so IBAL measures specificity only. The results:
- Default window (baseline 2025-06-28 to 07-01, current 07-02 to 07-09): all six evaluated
detectors
ok. No magnitude alarm and no sustained (CUSUM) alarm. - Full 2025 export, with a frozen baseline of 2025-01-28 to 03-31 and six monthly current
windows (April to September): 0 of 36 detector-windows raised a magnitude (warn / fault)
alarm. Two of 36 raised a provisional sustained-shift (CUSUM) prompt: head pressure and
subcooling in April, both at severity
ok. The CUSUM parameters are documented as untuned. - Sub-vacuum pressure readings (a dead transducer; the
refrigerant-pressure-below-vacuumdata issue) derive no saturation temperature and drop out rather than producing a false alarm.