MIXTURE_STRING
Overview
Excel Usage
=MIXTURE_STRING(fluids, fractions)
fluids(list[list], required): List or range of fluid names (strings).fractions(list[list], required): List or range of mole fractions (floats).
Returns (str): Formatted mixture string.
Examples
Example 1: Water Ethanol Mixture
Inputs:
| fluids | fractions |
|---|---|
| Water,Ethanol | 0.4,0.6 |
Excel formula:
=MIXTURE_STRING(Water,Ethanol, 0.4,0.6)
Expected output:
"HEOS::Water[0.4]&Ethanol[0.6]"
Example 2: Input from Excel 2D Range
Inputs:
| fluids | fractions |
|---|---|
| Nitrogen | 0.7 |
| Argon | 0.3 |
Excel formula:
=MIXTURE_STRING({"Nitrogen";"Argon"}, {0.7;0.3})
Expected output:
"HEOS::Nitrogen[0.7]&Argon[0.3]"
Example 3: R410A Definitions (50/50 R32/R125)
Inputs:
| fluids | fractions |
|---|---|
| R32,R125 | 0.5,0.5 |
Excel formula:
=MIXTURE_STRING(R32,R125, 0.5,0.5)
Expected output:
"HEOS::R32[0.5]&R125[0.5]"
Example 4: Artificial Air (Approximate)
Inputs:
| fluids | fractions |
|---|---|
| Nitrogen,Oxygen,Argon | 0.78,0.21,0.01 |
Excel formula:
=MIXTURE_STRING(Nitrogen,Oxygen,Argon, 0.78,0.21,0.01)
Expected output:
"HEOS::Nitrogen[0.78]&Oxygen[0.21]&Argon[0.01]"
Python Code
# No external imports needed for string formatting
def mixture_string(fluids, fractions):
"""
Create a formatted CoolProp mixture string from component fluids and mole fractions.
See: https://coolprop.org/fluid_properties/Mixtures.html
This example function is provided as-is without any representation of accuracy.
Args:
fluids (list[list]): List or range of fluid names (strings).
fractions (list[list]): List or range of mole fractions (floats).
Returns:
str: Formatted mixture string.
"""
def flatten(data):
if isinstance(data, list):
flat = []
for item in data:
if isinstance(item, list):
flat.extend(flatten(item))
else:
flat.append(item)
return flat
return [data]
try:
names = flatten(fluids)
fracs = flatten(fractions)
# Filter out empty strings or None values which might come from larger Excel ranges
names = [str(n).strip() for n in names if n is not None and str(n).strip() != ""]
fracs = [float(f) for f in fracs if f is not None and str(f).strip() != ""]
if len(names) != len(fracs):
return f"Error: Number of fluids ({len(names)}) does not match number of fractions ({len(fracs)})"
if not names:
return "Error: No fluids provided"
# Validate sum of fractions?
# CoolProp might not strictly require sum=1.0 for all backends, but usually for mixtures it should be close.
# We will just format the string and let CoolProp validate the physics later.
components = []
for n, f in zip(names, fracs):
components.append(f"{n}[{f}]")
return "HEOS::" + "&".join(components)
except Exception as e:
return f"Error: {str(e)}"