Incompressible Fluids¶
The CoolProp project not only supports Pure Fluids wrapped by the EngCoolProp EC_Fluid object EC_Fluid Functions, but also Incompressible Fluids wrapped by the EngCoolProp EC_Incomp_Fluid object EC_Incomp_Fluid Functions.
To see a list of all incompressible fluids execute the following script:
from CoolProp import __incompressibles_pure__
print( __incompressibles_pure__ )
In March 2025, results in the list: [‘Acetone’, ‘Air’, ‘AS10’, ‘AS20’, ‘AS30’, ‘AS40’, ‘AS55’, ‘DEB’, ‘DowJ’, ‘DowJ2’, ‘DowQ’, ‘DowQ2’, ‘DSF’, ‘Ethanol’, ‘ExampleDigitalPure’, ‘ExamplePure’, ‘FoodAsh’, ‘FoodCarbohydrate’, ‘FoodFat’, ‘FoodFiber’, ‘FoodIce’, ‘FoodProtein’, ‘FoodWater’, ‘HC10’, ‘HC20’, ‘HC30’, ‘HC40’, ‘HC50’, ‘HCB’, ‘HCM’, ‘Hexane’, ‘HFE’, ‘HFE2’, ‘HY20’, ‘HY30’, ‘HY40’, ‘HY45’, ‘HY50’, ‘LiqNa’, ‘NaK’, ‘NBS’, ‘PBB’, ‘PCL’, ‘PCR’, ‘PGLT’, ‘PHE’, ‘PHR’, ‘PLR’, ‘PMR’, ‘PMS1’, ‘PMS2’, ‘PNF’, ‘PNF2’, ‘S800’, ‘SAB’, ‘T66’, ‘T72’, ‘TCO’, ‘TD12’, ‘TVP1’, ‘TVP1869’, ‘TX22’, ‘TY10’, ‘TY15’, ‘TY20’, ‘TY24’, ‘Water’, ‘XLT’, ‘XLT2’, ‘ZS10’, ‘ZS25’, ‘ZS40’, ‘ZS45’, ‘ZS55’]
For incompressible fluids, EngCoolProp uses units of primarily inch, lbm, lbf, sec, BTU (some use of ft and hour).:
The following are the default units for each property.
T = Temperature = degR
Tsat = Saturation Temperature (T if P==Psat) = degR
Tnbp = Normal Boiling Point = degR
P = Pressure = psia
Psat = Saturation Pressure (Vapor Pressure at T) = psia
D = Density = lbm/cu ft
rho = Density = lbm/cu inch
E = Internal Energy = BTU/lbm
H = Enthalpy = BTU/lbm
S = Entropy = BTU/lbm degR
Cp = Heat Capacity (const. P) = BTU/lbm degR
V = Viscosity = 1.0E5 * lb/ft-sec
C = Thermal Conductivity = BTU/ft-hr-R
Default State Point¶
Create a listing of properties at the default state point. (i.e. T=(Tmax+Tmin)/2, P=Pmax/10):
from engcoolprop.ec_incomp_fluid import EC_Incomp_Fluid
# Create incompressible object. (without specifying state point)
ec_inc = EC_Incomp_Fluid(symbol="Water", auto_fix_value_errors=True, show_warnings=2 )
# Print state point
ec_inc.printProps() # Print state point at given T,P
Output:
+----------------------------------------------------------------+
| NOTICE: any input violations on limits of T, D, H or S |
| will be automatically corrected (set to min or max). |
| To change this behavior set "auto_fix_value_errors" to False |
| To suppress this banner set "show_warnings" to 0 or 1 |
+----------------------------------------------------------------+
State Point for fluid INCOMP::Water (Water)
T = 671 degR, Range( 491.67 - 851.67) degR
P = 1000 psia Range( 0 - 10000) psia
D = 60.043 lbm/cuft Range( 54.2479 - 62.6328) lbm/cuft
E = 142.121 BTU/lbm Range(-36.7331 - 328.172) BTU/lbm
H = 145.203 BTU/lbm Range(-35.9312 - 342.116) BTU/lbm
S = 0.238477 BTU/lbm degR Range(-0.072072 - 0.483928) BTU/lbm degR
Cp= 1.00285 BTU/lbm degR Range(0.999244 - 1.06583) BTU/lbm degR
V = 19.0492 viscosity [1.0E5 * lbm/ft-sec] Range( 9.17101 - 118.181)
C = 0.393587 thermal conductivity [BTU/ft-hr-R] Range(0.324617 - 0.3845)
Tnbp = 671.707 degR,
rho =0.0347471 lbm/cuin Range(0.031393 - 0.036246) lbm/cuin
Psat = 14.4914 psia Range(0 - 226.073) psia
Can also print short forms of properties as:
ec_inc.printTPD()
ec_inc.printTransport()
Output:
INCOMP::Water T= 671.0 P=1000.0 D=60.0430 E=142.12 H=145.20 S=0.238
INCOMP::Water Cp=1.00285 Visc=19.0492 ThCond=0.393587
State Point¶
Create a listing of properties at a given T and P. Note that Pmax is specified.
Pmax is the highest pressure considered in any iterative calcs. The default value for Pmax is 10,000 psia(see Range of P above). It is usually best to keep Pmax above the max pressure being analyzed.:
# Create incompressible object at T=500 degR, P=500 psia and max pressure = 5000 psia
ec_inc = EC_Incomp_Fluid(symbol="Water", T=500, P=500, Pmax=5000) # T=degR, P=psia
# OR... After ec_inc has been crated
ec_inc.setTP( 500, 500)
# Print state point
ec_inc.printProps()
Output:
State Point for fluid INCOMP::Water (Water)
T = 500 degR, Range( 491.67 - 851.67) degR
P = 500 psia Range( 0 - 5000) psia
D = 62.6007 lbm/cuft Range( 54.2479 - 62.6328) lbm/cuft
E = -27.7038 BTU/lbm Range( -36.353 - 328.172) BTU/lbm
H = -26.2257 BTU/lbm Range(-35.9729 - 335.377) BTU/lbm
S =-0.0538473 BTU/lbm degR Range(-0.071299 - 0.483928) BTU/lbm degR
Cp= 0.99868 BTU/lbm degR Range(0.999244 - 1.06583) BTU/lbm degR
V = 102.357 viscosity [1.0E5 * lbm/ft-sec] Range( 9.17101 - 118.181)
C = 0.330189 thermal conductivity [BTU/ft-hr-R] Range(0.324617 - 0.3845)
Tnbp = 671.707 degR,
rho = 0.0362273 lbm/cuin Range(0.031393 - 0.036246) lbm/cuin
Psat = 0 psia Range(0 - 226.073) psia
printSIUnits¶
Although EngCoolProp was created to promote English units when using CoolProp , it is often helpful to see properties in SI units.
For that reason, all the EngCoolProp models have a method called printSIUnits that will output the State Point with SI units. The script below shows the result of calling printSIUnits:
from engcoolprop.ec_incomp_fluid import EC_Incomp_Fluid
# Create incompressible object. (without specifying state point)
ec_inc = EC_Incomp_Fluid(symbol="Water", T=500, P=500, Pmax=5000,
auto_fix_value_errors=True, show_warnings=0 )
# Print state point with SI units
ec_inc.printSIProps() # Print state point at given T,P
Output:
State Point for fluid INCOMP::Water (Water)
T = 277.778 degK, Range( 273.15 - 473.15) degK
P =3.44738e+06 Pa Range( 0 - 3.44738e+07) Pa
D = 1002.77 kg/m^3 Range( 868.966 - 1003.28) kg/m^3
E = -64439 J/kg Range( -84557.2 - 763327) J/kg
H = -61001.1 J/kg Range( -83673 - 780087) J/kg
S = -225.448 J/kg/K Range( -298.514 - 2026.11) J/kg/K
Cp= 4181.27 J/kg/K Range( 4183.63 - 4462.41) J/kg/K
V = 0.00152325 viscosity Pa s Range( 0.00013648 - 0.00175873) Pa s
C = 0.571088 thermal conductivity W/m/K Range( 0.561449 - 0.665022) W/m/K
Tnbp = 373.171 degK,
rho = 1.00277 g/cm^3 Range( 0.868967 - 1.00328) g/cm^3
Psat = 0 Pa Range( 0 - 1.55872e+06) Pa
Acetone State Point¶
The above examples were for Water that has saturation properties included in CoolProp. Acetone does not have saturation properties. An example with Acetone looks as follows:
from engcoolprop.ec_incomp_fluid import EC_Incomp_Fluid
# Create incompressible object. (without specifying state point)
ec_inc = EC_Incomp_Fluid(symbol="Acetone" )
# Print state point
ec_inc.printProps()
As before, the default state point is T=(Tmax+Tmin)/2, P=Pmax/10
Output:
State Point for fluid INCOMP::Acetone (Acetone)
T = 553 degR, Range( 356.67 - 749.665) degR
P = 1000 psia Range( 0 - 10000) psia
D = 48.427 lbm/cuft Range( 39.3847 - 55.7377) lbm/cuft
E = 11.2384 BTU/lbm Range(-91.8912 - 123.564) BTU/lbm
H = 15.0596 BTU/lbm Range(-83.7831 - 123.564) BTU/lbm
S =0.0209767 BTU/lbm degR Range(-0.214127 - 0.194387) BTU/lbm degR
Cp= 0.516159 BTU/lbm degR Range(0.476931 - 0.623845) BTU/lbm degR
V = 23.0543 viscosity [1.0E5 * lbm/ft-sec] Range( 12.4036 - 113.822)
C = 0 thermal conductivity [BTU/ft-hr-R] Range( 0 - 0)
rho =0.0280249 lbm/cuin Range(0.022792 - 0.032256) lbm/cuin
Making Plots¶
An easy way to make plots is to use the matplotlib package.
To install matplotlib give the commands:
pip install matplotlib
... OR to upgrade...
pip install --upgrade matplotlib
The example below will plot the enthalpy (H) of DowQ as a function of temperature and pressure.:
import matplotlib.pyplot as plt
import numpy as np
from engcoolprop.ec_incomp_fluid import EC_Incomp_Fluid
# Create incompressible solution object. (without specifying state point)
ec_inc = EC_Incomp_Fluid(symbol="DowQ", auto_fix_value_errors=True, show_warnings=0 ) # T=degR, P=psia
tArr = np.linspace(500, 800, 50)
# Use a few different pressures
for P in [10000, 5000, 2000, 15]:
densL = []
for T in tArr:
ec_inc.setTP( T, P)
densL.append( ec_inc.H )
plt.plot( tArr, densL, label="P = %g"%P)
plt.grid( True )
plt.title( 'DowQ Enthalpy')
plt.xlabel( 'Temperature (degR)')
plt.ylabel( 'Enthalpy (BTU/lbm)')
plt.legend( loc='best' )
plt.savefig( 'DowQ_enthalpy.png', dpi=200)
plt.show()