CoolProp wrapper for Python
Run the following command:
pip install pyfluidsFluidclass - an implementation of pure fluids and binary mixturesMixtureclass - an implementation of mixtures with pure fluids componentsFluidsListenum - the list of all available fluidsInputclass - the inputs for theFluidandMixtureclassesHumidAirclass - an implementation of real humid airInputHumidAirclass - the inputs for theHumidAirclass
Using a configuration file, you can choose the units system
that will be used in your project (for both inputs and outputs of pyfluids).
- SI (
UnitsSystem.SI):- temperature unit - Kelvin (K)
- decimal fraction unit - dimensionless (from 0 to 1)
- SI with Celsius (
UnitsSystem.SIWithCelsius):- temperature unit - degree Celsius (°C)
- decimal fraction unit - dimensionless (from 0 to 1)
- SI with Celsius and percents (
UnitsSystem.SIWithCelsiusAndPercents) - by default:- temperature unit - degree Celsius (°C)
- decimal fraction unit - percent (%, from 0 to 100)
pyfluids.inipyfluids.jsonpyproject.tomltox.ini
[pyfluids]
units_system = SI{
"pyfluids": {
"units_system": "SIWithCelsius"
}
}[tool.pyfluids]
units_system = "SIWithCelsiusAndPercents"[pyfluids]
units_system = SIIf the required property is not present in the instance of the fluid, then you can add it by extending
the Fluid, Mixture or HumidAir classes (see how to add other properties).
compressibility- compressibility factor (dimensionless)conductivity- thermal conductivity (W/m/K)critical_pressure- absolute pressure at the critical point (Pa)critical_temperature- temperature at the critical point (by default, °C; see how to change it)density- mass density (kg/m3)dynamic_viscosity- dynamic viscosity (Pa*s)enthalpy- mass specific enthalpy (J/kg)entropy- mass specific entropy (J/kg/K)freezing_temperature- temperature at the freezing point (for incompressible fluids) (by default, °C; see how to change it)internal_energy- mass specific internal energy (J/kg)kinematic_viscosity- kinematic viscosity (m2/s)max_pressure- maximum pressure limit (Pa)max_temperature- maximum temperature limit (by default, °C; see how to change it)min_pressure- minimum pressure limit (Pa)min_temperature- minimum temperature limit (by default, °C; see how to change it)molar_mass- molar mass (kg/mol)phase- phase state (enum)prandtl- Prandtl number (dimensionless)pressure- absolute pressure (Pa)quality- mass vapor quality (by default, %; see how to change it)sound_speed- sound speed (m/s)specific_heat- mass specific constant pressure specific heat (J/kg/K)specific_volume- mass specific volume (m3/kg)surface_tension- surface tension (N/m)temperature- temperature (by default, °C; see how to change it)triple_pressure- absolute pressure at the triple point (Pa)triple_temperature- temperature at the triple point (by default, °C; see how to change it)units_system- configured units system (enum)
compressibility- compressibility factor (dimensionless)conductivity- thermal conductivity (W/m/K)density- mass density per humid air unit (kg/m3)dew_temperature- dew-point temperature (by default, °C; see how to change it)dynamic_viscosity- dynamic viscosity (Pa*s)enthalpy- mass specific enthalpy per humid air (J/kg)entropy- mass specific entropy per humid air (J/kg/K)humidity- absolute humidity ratio (kg/kg d.a.)kinematic_viscosity- kinematic viscosity (m2/s)partial_pressure- partial pressure of water vapor (Pa)prandtl- Prandtl number (dimensionless)pressure- absolute pressure (Pa)relative_humidity- relative humidity ratio (by default, %; see how to change it)specific_heat- mass specific constant pressure specific heat per humid air (J/kg/K)specific_volume- mass specific volume per humid air unit (m3/kg)temperature- dry-bulb temperature (by default, °C; see how to change it)wet_bulb_temperature- wet-bulb temperature (by default, °C; see how to change it)units_system- configured units system (enum)
For more information, see the docstrings.
factory- returns a new fluid instance with no defined statewith_state- returns a new fluid instance with a defined stateupdate- updates the state of the fluidreset- resets all non-trivial propertiesspecify_phase- specify the phase state for all further calculationsunspecify_phase- unspecify the phase state and go back to calculating it based on the inputsclone- performs deep (full) copy of the fluid instanceisentropic_compression_to_pressure- the process of isentropic compression to given pressurecompression_to_pressure- the process of compression to given pressureisenthalpic_expansion_to_pressure- the process of isenthalpic expansion to given pressureisentropic_expansion_to_pressure- the process of isentropic expansion to given pressureexpansion_to_pressure- the process of expansion to given pressurecooling_to_temperature- the process of cooling to given temperaturecooling_to_enthalpy- the process of cooling to given enthalpyheating_to_temperature- the process of heating to given temperatureheating_to_enthalpy- the process of heating to given enthalpybubble_point_at_pressure- bubble point at given pressurebubble_point_at_temperature- bubble point at given temperaturedew_point_at_pressure- dew point at given pressuredew_point_at_temperature- dew point at given temperaturetwo_phase_point_at_pressure- two-phase point at given pressuremixing- the mixing processas_json- converts the fluid instance to a JSON stringas_dict- converts the fluid instance to a dict
factory- returns a new mixture instance with no defined statewith_state- returns a new mixture instance with a defined stateupdate- updates the state of the mixturereset- resets all non-trivial propertiesspecify_phase- specify the phase state for all further calculationsunspecify_phase- unspecify the phase state and go back to calculating it based on the inputsclone- performs deep (full) copy of the mixture instancecooling_to_temperature- the process of cooling to given temperatureheating_to_temperature- the process of heating to given temperatureas_json- converts the mixture instance to a JSON stringas_dict- converts the mixture instance to a dict
factory- returns a new humid air instance with no defined statewith_state- returns a new humid air instance with a defined stateupdate- updates the state of the humid airreset- resets all propertiesclone- performs deep (full) copy of the humid air instancedry_cooling_to_temperature- the process of cooling without dehumidification to given temperaturedry_cooling_to_enthalpy- the process of cooling without dehumidification to given enthalpywet_cooling_to_temperature_and_relative_humidity- the process of cooling with dehumidification to given temperature and relative humidity ratiowet_cooling_to_temperature_and_absolute_humidity- the process of cooling with dehumidification to given temperature and absolute humidity ratiowet_cooling_to_enthalpy_and_relative_humidity- the process of cooling with dehumidification to given enthalpy and relative humidity ratiowet_cooling_to_enthalpy_and_absolute_humidity- the process of cooling with dehumidification to given enthalpy and absolute humidity ratioheating_to_temperature- the process of heating to given temperatureheating_to_enthalpy- the process of heating to given enthalpyhumidification_by_water_to_relative_humidity- the process of humidification by water (isenthalpic) to given relative humidity ratiohumidification_by_water_to_absolute_humidity- the process of humidification by water (isenthalpic) to given absolute humidity ratiohumidification_by_steam_to_relative_humidity- the process of humidification by steam (isothermal) to given relative humidity ratiohumidification_by_steam_to_absolute_humidity- the process of humidification by steam (isothermal) to given absolute humidity ratiomixing- the mixing processas_json- converts the humid air instance to a JSON stringas_dict- converts the humid air instance to a dict
To calculate the specific heat of saturated water vapor at 1 atm:
from pyfluids import Fluid, FluidsList
water_vapour = Fluid(FluidsList.Water).dew_point_at_pressure(101325)
print(water_vapour.specific_heat) # 2079.937085633241To calculate the dynamic viscosity of propylene glycol aqueous solution with 60 % mass fraction at 100 kPa and -20 °C:
from pyfluids import Fluid, FluidsList, Input
propylene_glycol = Fluid(FluidsList.MPG, 60).with_state(
Input.pressure(100e3), Input.temperature(-20)
)
print(propylene_glycol.dynamic_viscosity) # 0.13907391053938878To calculate the density of ethanol aqueous solution (with ethanol 40 % mass fraction) at 200 kPa and 4 °C:
from pyfluids import Mixture, FluidsList, Input
mixture = Mixture([FluidsList.Water, FluidsList.Ethanol], [60, 40]).with_state(
Input.pressure(200e3), Input.temperature(4)
)
print(mixture.density) # 883.3922771627963To calculate the wet bulb temperature of humid air at 300 m above sea level, 30 °C and 50 % relative humidity:
from pyfluids import HumidAir, InputHumidAir
humid_air = HumidAir().with_state(
InputHumidAir.altitude(300),
InputHumidAir.temperature(30),
InputHumidAir.relative_humidity(50),
)
print(humid_air.wet_bulb_temperature) # 21.917569033181564You can simply determine the equality of Fluid, Mixture and HumidAir instances by its state.
Just use the equality operators (== or !=).
Exactly the same way you can compare inputs (Input and InputHumidAir).
For example:
from pyfluids import HumidAir, InputHumidAir
humid_air = HumidAir().with_state(
InputHumidAir.altitude(0),
InputHumidAir.temperature(20),
InputHumidAir.relative_humidity(50),
)
same_humid_air = HumidAir().with_state(
InputHumidAir.pressure(101325),
InputHumidAir.temperature(20),
InputHumidAir.relative_humidity(50),
)
print(humid_air == same_humid_air) # True
print(InputHumidAir.altitude(0) == InputHumidAir.pressure(101325)) # TrueThe Fluid, Mixture and HumidAir classes have a method as_json,
which performs converting of instance to a JSON string.
For example, converting a Fluid instance to an indented JSON string:
from pyfluids import Fluid, FluidsList
refrigerant = Fluid(FluidsList.R32).dew_point_at_temperature(5)
print(refrigerant.as_json())As a result:
{
"compressibility": 0.8266625877210833,
"conductivity": 0.013435453854396475,
"critical_pressure": 5782000.0,
"critical_temperature": 78.10500000000002,
"density": 25.89088151061046,
"dynamic_viscosity": 1.2606543144761657e-5,
"enthalpy": 516105.7800378023,
"entropy": 2136.2654412978777,
"fraction": 100,
"freezing_temperature": null,
"internal_energy": 479357.39743435377,
"kinematic_viscosity": 4.869105418289953e-7,
"max_pressure": 70000000.0,
"max_temperature": 161.85000000000002,
"min_pressure": 47.999893876059375,
"min_temperature": -136.80999999999997,
"molar_mass": 0.052024,
"name": "R32",
"phase": "TwoPhase",
"prandtl": 1.2252282243443504,
"pressure": 951448.019691762,
"quality": 100.0,
"sound_speed": 209.6337575990297,
"specific_heat": 1305.7899441785378,
"specific_volume": 0.03862363664945844,
"surface_tension": 0.010110117241546162,
"temperature": 5.0,
"triple_pressure": 47.999893876059375,
"triple_temperature": -136.80999999999997,
"units_system": "SIWithCelsiusAndPercents"
}The Fluid, Mixture and HumidAir classes have a method as_dict,
which performs converting of instance to a Python dict.
For example:
from pyfluids import Fluid, FluidsList
refrigerant = Fluid(FluidsList.R32).dew_point_at_temperature(5)
print(refrigerant.as_dict()) # {'compressibility': 0.8266625877210833, 'conductivity': ...The Fluid, Mixture and HumidAir classes have a method clone,
which performs deep (full) copy of instance:
from pyfluids import Fluid, FluidsList, Input
origin = Fluid(FluidsList.Water).with_state(
Input.pressure(101325), Input.temperature(20)
)
clone = origin.clone()
print(origin == clone) # True
clone.update(Input.pressure(101325), Input.temperature(30))
print(origin == clone) # False