Skip to content

Latest commit

 

History

History
208 lines (139 loc) · 6.24 KB

HighLevelAPI.rst

File metadata and controls

208 lines (139 loc) · 6.24 KB

High-Level Interface

PropsSI function

For many users, all that is needed is a simple call to the PropsSI function for pure fluids, pseudo-pure fluids and mixtures. For humid air properties, see Humid air properties <Humid-Air>. An example using PropsSI:

# Import the PropsSI function In [1]: from CoolProp.CoolProp import PropsSI

# Saturation temperature of Water at 1 atm in K In [2]: PropsSI('T','P',101325,'Q',0,'Water')

More information:

  • Table of inputs to PropsSI function <parameter_table>
  • More examples of the high-level API <Props_Sample>
  • Documentation for all high-level functions exposed <CoolPropLib.h>

All the wrappers <wrappers> wrap this function in exactly the same way.

For pure and pseudo-pure fluids, two state points are required to fix the state. The equations of state are based on T and ρ as state variables, so T, ρ will always be the fastest inputs. P, T will be a bit slower (3-10 times), and then comes inputs where neither T nor ρ are given, like p, h. They will be much slower. If speed is an issue, you can look into table-based interpolation methods using TTSE or bicubic interpolation.

PhaseSI function

It can be useful to know what the phase of a given state point is. A high-level function called PhaseSI has been implemented to allow for access to the phase.

In [1]: import CoolProp

In [5]: CoolProp.CoolProp.PhaseSI('P',101325,'Q',0,'Water')

The phase index (as floating point number) can also be obtained using the PropsSI function. In python you would do:

In [1]: import CoolProp

In [5]: CoolProp.CoolProp.PropsSI('Phase','P',101325,'Q',0,'Water')

where you can obtain the integer indices corresponding to the phase flags using the get_phase_index function:

In [1]: import CoolProp

In [6]: CoolProp.CoolProp.get_phase_index('phase_twophase')

# Or for liquid In [6]: CoolProp.CoolProp.get_phase_index('phase_liquid')

For a given fluid, the phase can be plotted in T-p coordinates:

import matplotlib import numpy as np import CoolProp as CP import matplotlib.pyplot as plt import scipy.interpolate

Water = CP.AbstractState("HEOS", "Water") pc = Water.keyed_output(CP.iP_critical) Tc = Water.keyed_output(CP.iT_critical) Tmin = 200 Tmax = 1000 pmax = Water.keyed_output(CP.iP_max) pt = 611.657 Tt = 273.16 fillcolor = 'g'

fig = plt.figure(figsize = (6,6)) ax = fig.add_subplot(111) lw = 3

# --------------# Melting curve # --------------melt_args = dict(lw = lw, solid_capstyle = 'round') TT = [] PP = list(np.logspace(np.log10(pt), np.log10(pmax),1000)) for p in PP: TT.append(Water.melting_line(CP.iT, CP.iP, p))

#Zone VI for T in np.linspace(max(TT), 355): TT.append(T) theta = T/273.31 pi = 1-1.07476*(1-theta*4.6) p = pi632.4e6 PP.append(p)

plt.plot(TT,PP,'darkblue',**melt_args)

# ----------------# Saturation curve # ----------------Ts = np.linspace(273.16, Tc, 1000) ps = CP.CoolProp.PropsSI('P','T',Ts,'Q',[0]*len(Ts),'Water',[1])

# ------# Labels # ------

plt.plot(Ts,ps,'orange',lw = lw, solid_capstyle = 'round')

# Critical lines plt.axvline(Tc, dashes = [2, 2]) plt.axhline(pc, dashes = [2, 2])

# Labels plt.text(850, 1e8, 'supercritical',ha= 'center') plt.text(850, 1e5, 'supercritical_gas', rotation = 90) plt.text(450, 1e8, 'supercritical_liquid', rotation = 0, ha = 'center') plt.text(350, 3e6, 'liquid', rotation = 45) plt.text(450, 5e4, 'gas', rotation = 45)

plt.ylim(611,1e9) plt.gca().set_yscale('log') plt.gca().set_xlim(240, 1000) plt.ylabel('Pressure [Pa]') plt.xlabel('Temperature [K]') plt.tight_layout()

Predefined Mixtures

A number of predefined mixtures are included in CoolProp. You can retrieve the list of predefined mixtures by calling get_global_param_string("predefined_mixtures") which will return a comma-separated list of predefined mixtures. In Python, to get the first 5 mixtures, you would do

In [1]: import CoolProp as CP

In [1]: CoolProp.CoolProp.get_global_param_string('predefined_mixtures').split(',')[0:6]

and then to calculate the density of air using the mixture model at 1 atmosphere (=101325 Pa) and 300 K, you could do

In [1]: import CoolProp as CP

In [1]: CoolProp.CoolProp.PropsSI('D','P',101325,'T',300,'Air.mix')

Exactly the methodology can be used from other wrappers.

C++ Sample Code

snippets/propssi.cxx

C++ Sample Code Output

snippets/propssi.cxx.output

Sample Code

In [1]: import CoolProp as CP

In [1]: print CP.__version__

In [1]: print CP.__gitrevision__

#Import the things you need In [1]: from CoolProp.CoolProp import PropsSI

# Specific heat (J/kg/K) of 20% ethylene glycol as a function of T In [2]: PropsSI('C','T',298.15,'P',101325,'INCOMP::MEG-20%')

# Density of Air at standard atmosphere in kg/m^3 In [2]: PropsSI('D','T',298.15,'P',101325,'Air')

# Saturation temperature of Water at 1 atm In [2]: PropsSI('T','P',101325,'Q',0,'Water')

# Saturated vapor density of R134a at 0C In [2]: PropsSI('H','T',273.15,'Q',1,'R134a')

# Using properties from CoolProp to get R410A density In [2]: PropsSI('D','T',300,'P',101325,'HEOS::R32[0.697615]&R125[0.302385]')

# Using properties from REFPROP to get R410A density In [2]: PropsSI('D','T',300,'P',101325,'REFPROP::R32[0.697615]&R125[0.302385]')

# Check that the same as using pseudo-pure In [2]: PropsSI('D','T',300,'P',101325,'R410A')

Table of string inputs to PropsSI function