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)}"

Online Calculator