Files
CoolProp/dev/fluids
Ian Bell cd69d4b538 Add refrigerant mixture models (Bell-JPCRD-2022/2023) and update R-1234yf EOS (#2725)
* Add refrigerant mixture models (Bell-JPCRD-2022/2023) and update R-1234yf EOS

Pure fluid:
- Replace Richter-JCED-2011 with Lemmon-Akasaka 2022 (Int. J. Thermophys. 43:119)
  as EOS[0] for R-1234yf; retain Richter as EOS[1]
- Ttriple updated from 220.0 K to 121.6 K; pc=3384400 Pa; rhoc=4180 mol/m3
- All 16 Table 7 check values pass to 5+ significant figures
- ASHRAE enthalpy reference state correct: h_L(0C)=200 kJ/kg
- Saturation consistent from 150 K to 360 K (L/V pressure equality)
- SUPERANCILLARY omitted pending fastchebpure fix; CoolProp uses the
  Table 2 ancillary equations (pS, rhoL, rhoV) as initial guesses

Mixture departure functions (8 new, type=Exponential):
- Bell-JPCRD-2022: R1234yf-R134a, R1234yf-R1234ze(E), R134a-R1234ze(E)
- Bell-JPCRD-2023: R32-R1234yf, R32-R1234ze(E), R1234yf-R152a,
                   R125-R1234yf, R1234ze(E)-R227ea

Binary pair parameters (5 updated, 3 new):
- Updated R1234yf/R134a, R32/R1234yf, R32/R1234ze(E),
         R125/R1234yf, R1234yf/R152a (replacing Akasaka-FPE-2013
         and Bell-JCED-2016 interim models with final fits)
- Added R1234yf/R1234ze(E), R134a/R1234ze(E), R1234ze(E)/R227ea

BibTeX entries added: Bell-JPCRD-2022, Bell-JPCRD-2023, Lemmon-IJT-2022

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add C++ check value tests for Lemmon-IJT-2022 and Bell-JPCRD-2022/2023

- Table 7 from Lemmon & Akasaka (2022): 6 state points for R1234yf
  covering ideal-gas, gas, compressed liquid, and near-critical
- Fixed-point constants: Tc, pc, rhoc, Ttriple
- Table XI from Bell (2022): alphar check values for three R1234yf-based
  binary pairs (R1234yf/R1234zeE, R1234yf/R134a, R134a/R1234zeE)
- Table XIII from Bell (2023): alphar check values for five mixture pairs
  (R32/R1234yf, R32/R1234zeE, R125/R1234yf, R1234yf/R152a, R1234zeE/R227ea)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add mixture departure functions and binary pair parameters

Bell-JPCRD-2022 (DOI 10.1063/5.0083545):
- 3 new departure functions: R1234yf-R134a, R1234yf-R1234ze(E), R134a-R1234ze(E)
- 3 new/updated binary pairs

Bell-JPCRD-2023 (DOI 10.1063/5.0124188):
- 5 new departure functions: R32-R1234yf, R32-R1234ze(E), R1234yf-R152a,
  R125-R1234yf, R1234ze(E)-R227ea
- 5 new/updated binary pairs (supersedes Bell-JCED-2016 interim models)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: add superancillary equations to R1234yf EOS

Builds Chebyshev superancillary for R1234yf covering the full
saturation curve from Ttriple (121.6 K) to near-critical (66
intervals). Also adds missing 'description' fields to the ANCILLARIES
block (required by the teqp ancillary loader).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(mixtures): correct betaT ordering for R1234zeE pairs; add inverted-order tests

The Bell-JPCRD-2022 JSON entries for R1234yf+R1234zeE and R134a+R1234zeE
had CAS1=R1234zeE (alphabetically first), causing no swap on load.  When
the mixture was constructed with the other component first CoolProp's
MixtureParameters swap logic inverted betaT a second time, yielding the
wrong reducing temperature.

Fix: swap CAS1/CAS2 so that CAS1 is alphabetically later for both pairs,
triggering a swap-on-load that pre-inverts betaT at full double precision.
The swap-on-use then recovers the exact paper value with no rounding error.
The original paper betaT/betaV values are restored in the JSON.

Also enable DmolarT_INPUTS on mixture backends in DHSU_T_flash so the
alphar check-value tests can call update(DmolarT_INPUTS, ...) on a mixture
AbstractState without throwing.

Test updates:
- Bell-JPCRD-2022 Table XI check values for R1234yf-containing pairs
  updated to the final Lemmon-IJT-2022 EOS (pre-pub EOS used in paper
  differs by ~0.4%); tolerance tightened from 1e-6 to 1e-10 throughout.
- Three new inverted-component-order sections check the same tabulated
  alphar values as the forward-order tests, verifying that the GERG
  reducing function symmetry (swap components + reciprocal beta = same
  result) is preserved by the CAS-ordering fix.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs(tests): clarify that R1234yf EOS change drives the Table XI value updates

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: bump fastchebpure pin to 2026.04.18 for R1234yf superancillary data

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(tests): specify phase in mixture DmolarT tests; revert FlashRoutines workaround

Mixture tests that call update(DmolarT_INPUTS, ...) must call specify_phase()
first so DHSU_T_flash uses the imposed-phase path rather than hitting the
NotImplementedError. Reverts the iDmolar special-case added to the mixture
else-branch of DHSU_T_flash.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 16:57:35 -04:00
..
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00
2025-06-14 16:00:40 -04:00