Incompressible Solutions

The CoolProp project not only supports Pure Fluids wrapped by the EngCoolProp EC_Fluid object EC_Fluid Functions, but also Incompressible Solutions (e.g. Brines and Solutions) wrapped by the EngCoolProp EC_Incomp_Soln object EC_Incomp_Soln Functions.

To see a list of all incompressible fluids execute the following script:

from CoolProp import __incompressibles_solution__
print( __incompressibles_solution__ )

In March 2025, results in the list: [‘AEG’, ‘AKF’, ‘AL’, ‘AN’, ‘APG’, ‘ExampleDigital’, ‘ExampleMelinder’, ‘ExampleSecCool’, ‘ExampleSolution’, ‘FRE’, ‘GKN’, ‘IceEA’, ‘IceNA’, ‘IcePG’, ‘LiBr’, ‘MAM’, ‘MAM2’, ‘MCA’, ‘MCA2’, ‘MEA’, ‘MEA2’, ‘MEG’, ‘MEG2’, ‘MGL’, ‘MGL2’, ‘MITSW’, ‘MKA’, ‘MKA2’, ‘MKC’, ‘MKC2’, ‘MKF’, ‘MLI’, ‘MMA’, ‘MMA2’, ‘MMG’, ‘MMG2’, ‘MNA’, ‘MNA2’, ‘MPG’, ‘MPG2’, ‘PK2’, ‘PKL’, ‘VCA’, ‘VKC’, ‘VMA’, ‘VMG’, ‘VNA’, ‘ZAC’, ‘ZFC’, ‘ZLC’, ‘ZM’, ‘ZMC’]

For incompressible solutions, 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
P    = Pressure = 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_soln import EC_Incomp_Soln

# Create incompressible solution object. (without specifying state point)
ec_soln = EC_Incomp_Soln(symbol="MEG-30%", auto_fix_value_errors=False, show_warnings=2)


# Print state point
ec_soln.printProps() # Print state point

Because the freezing point of MEG-30% is above the published minimum temperature for generic MEG 0% to 60%, the minimum permissible temperature for MEG-30% was raised to just above the freezing point.

Output:

NOTICE: Tmin=311.7 degR has been increased to T_freeze + 1 = 466.4 degR
State Point for fluid INCOMP::MEG-30% (MEG-30%)
T =      569  degR,                              Range( 466.434 -   671.67) degR
P =     1000  psia                               Range(       0 -    10000) psia
D =  64.1291  lbm/cuft                           Range( 61.7671 -  65.4448) lbm/cuft
E =  36.5211  BTU/lbm                            Range(-55.0162 -  131.546) BTU/lbm
H =  39.4067  BTU/lbm                            Range(-53.6702 -  152.698) BTU/lbm
S =0.0667365  BTU/lbm degR                       Range(-0.110884 - 0.220262) BTU/lbm degR
Cp= 0.903676  BTU/lbm degR                       Range(0.863298 - 0.936644) BTU/lbm degR
V =  80.8991  viscosity [1.0E5 * lbm/ft-sec]     Range( 33.4415 -  524.521)
C = 0.280781  thermal conductivity [BTU/ft-hr-R] Range( 0.24988 - 0.307045)
    T_freeze = 465.434 degR
    rho      = 0.0371118  lbm/cuin               Range(0.035745 - 0.037873) lbm/cuin
    mass%    =        30 base mass percent       Range(0% - 60%)

Can also print short forms of properties as:

ec_soln.printTPD()

ec_soln.printTransport()

Output:

INCOMP::MEG-30% T= 569.0 P=1000.0 D=64.1291 E= 36.52 H= 39.41 S=0.067
INCOMP::MEG-30% Cp=0.903676 Visc=80.8991 ThCond=0.280781

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.:

from engcoolprop.ec_incomp_soln import EC_Incomp_Soln

# Create incompressible soln object at T=500 degR, P=500 psia and max pressure = 5000 psia
ec_soln = EC_Incomp_Soln(symbol="MEG-30%", T=500, P=500, Pmax=5000) # T=degR, P=psia

# OR... After ec_soln has been crated
# ec_soln.setTP( 500, 500)

# Print state point
ec_soln.printProps()

Output:

NOTICE: Tmin=311.7 degR has been increased to T_freeze + 1 = 466.4 degR
State Point for fluid INCOMP::MEG-30% (MEG-30%)
T =       500  degR,                              Range( 466.434 -   671.67) degR
P =       500  psia                               Range(       0 -     5000) psia
D =   65.1491  lbm/cuft                           Range( 61.7671 -  65.4448) lbm/cuft
E =  -24.5781  BTU/lbm                            Range(-54.3432 -  131.546) BTU/lbm
H =  -23.1579  BTU/lbm                            Range(-53.6702 -  142.122) BTU/lbm
S =-0.0477664  BTU/lbm degR                       Range(-0.109441 - 0.220262) BTU/lbm degR
Cp=  0.877102  BTU/lbm degR                       Range(0.863298 - 0.936644) BTU/lbm degR
V =   242.449  viscosity [1.0E5 * lbm/ft-sec]     Range( 33.4415 -  524.521)
C =    0.2604  thermal conductivity [BTU/ft-hr-R] Range( 0.24988 - 0.307045)
    T_freeze = 465.434 degR
    rho      =   0.037702  lbm/cuin               Range(0.035745 - 0.037873) lbm/cuin
    mass%    =         30 base mass percent       Range(0% - 60%)

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_soln import EC_Incomp_Soln

# Create incompressible solution object. (without specifying state point)
ec_soln = EC_Incomp_Soln(symbol="MEG-30%", auto_fix_value_errors=True, show_warnings=0)

# Print state point
ec_soln.printSIProps() # Print state point with SI units

Output:

State Point for fluid INCOMP::MEG-30% (MEG-30%)
T =    316.111  degK,                        Range(259.13 - 373.15) degK
P =6.89476e+06  Pa                           Range(0 - 6.89476e+07) Pa
D =    1027.25  kg/m^3                       Range(989.413 - 1048.32) lbm/cuft
E =    84948.2  J/kg                         Range(-127968 - 305976) J/kg
H =      91660  J/kg                         Range(-124837 - 355176) J/kg
S =    279.412  J/kg/K                       Range(-464.25 - 922.192) J/kg/K
Cp=    3783.51  J/kg/K                       Range(3614.45 - 3921.54) J/kg/K
V = 0.00120391  viscosity Pa s               Range(0.000497664 - 0.00780573) Pa s
C =   0.485632  thermal conductivity W/m/K   Range(0.432187 - 0.531059) W/m/K
    T_freeze =     258.574 degK
    rho      =     1.02725  g/cm^3           Range(0.989415 - 1.04833) g/cm^3
    mass%    =          30 base mass percent Range(0% - 60%)

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 density (D) of MEG for a number of solution concentrations.:

import matplotlib.pyplot as plt
import numpy as np
from engcoolprop.ec_incomp_soln import EC_Incomp_Soln

P = 1000
for pcent in [60, 40, 20, 0]:

    # Create incompressible solution object. (without specifying state point)
    ec_soln = EC_Incomp_Soln(symbol="MEG-%i%%"%pcent, auto_fix_value_errors=True, show_warnings=0)

    tArr = np.linspace(ec_soln.Tmin, ec_soln.Tmax, 50)

    densL = []
    for T in tArr:
        ec_soln.setTP( T, P)
        densL.append( ec_soln.D )

    plt.plot( tArr, densL, label="MEG-%i%%"%pcent)

plt.grid( True )
plt.title( 'MEG Solution Densities')
plt.xlabel( 'Temperature (degR)')
plt.ylabel( 'Density (lbm/cuft)')
plt.legend( loc='best' )

plt.savefig( 'MEG_pcent_D.png', dpi=200)
plt.show()
_images/MEG_pcent_D.png