freesteam is an open source implementation of international-standard IAPWS-IF97 steam tables from the International Association for the Properties of Water and Steam (IAPWS). freesteam lets you compute water and steam properties for a wide range of pressures and temperatures: you can specify the state of the steam in terms of a variety of combinations of 'known' properties, then freesteam will solve and allow you to query to find the values of the 'unknown' properties.

The library includes bindings for the Python language, as well as bindings to allow it to be used from the ASCEND modelling environment. For Windows and Mac and Ubuntu users, convenient binary packages are provided.

New: Freesteam 2.0 released! This is a complete rewrite of freesteam in the C language, for faster, smaller binaries and better compatibility for accessing the DLL/SO from different C++ compilers.

There is a mailing list for freesteam users, which is the preferred support mechansim (it ensures that FAQs are captured for others to re-use). Alternatively, you can email the developer directly on . The project is currently under active development (as of Jan 2010), and contributions are most welcome!

1. What can I do with it?

Using freesteam, you can set the state of steam using various pairs of know properties. The following input pairs are implemented:
  • (p,T)
  • (p,h)
  • (p,s)
  • (p,v)
  • (T,s)
  • (T,x)

In C, these states are set using syntax like SteamState S = freesteam_set_ph(p,h). In Python, the syntax is S = steam_ph(p,h). The routines return a 'SteamState' object that can then be queried for any output properties you wish to know, including
p Pressure
T Temperature
h Enthalpy
s Entropy
cp Isobaric heat capacity
cv Isochoric heat capacity
v Specific volume
rho Density
u Internal energy
Quality (when saturated)
k Thermal conductivity
mu Dynamic viscosity
w Speed of sound

The above properties are accessed using functions in C, like double p = freesteam_p(S), and using properties in Python, like p = S.p.

Calculation of surface tension is not currently implemented in version 2.0

Saturation curves and the boundary curves used internally by IAPWS-IF97 can also be accessed, if required.

Freesteam is now able (version 2.x) to auto-generate a complete set of steam tables suitable for student use, as well as a range of property diagrams, using Python code. Some property diagrams produced using freesteam-0.8.1 are also available.

Please check out the example code

2. License

freesteam is released under the GNU GPL, which is available online at It is also distributed with the source code distribution for freesteam, as LICENSE.txt.

Note that under the GPL, you cannot sell or otherwise distribute any code that dynamically or statically links to the freesteam library unless your code is also licensed under the GPL.

3. Bugs

For a complete up-to-date list of bugs and feature requests, visit the Mantis bug tracker for the project. We are not using the SourceForge 'tracker' at this stage.

Some of the bugs current at the time of writing:

  • Mac binary installer does not include the sample Python scripts
  • There are still some small errors in the (p,h) calculation, of the order of 0.1%.
  • Our documentation needs to clearly indicate which IAPWS releases are used to provide different functionality.

4. Future directions

Some of the things waiting 'on the drawing board' are as follows. If you can help, please let me know!

High priority

  • Updated documentation!
  • Some more example code.

DIY Ideas 4U

  • We would like to expose freesteam functionality to Excel via the XLW wrapper classes.
  • Backwards correlations should be iteratively refined by a subsequent Newton solver stage, to reduce errors associated with their use.
  • An add-in for OpenOffice would be good. Have received some partially-working source code for this from Allan Curtis
  • Region 5 has not yet been implemented at all, but it's a low priority. Let us know if you'd need it.
  • Develop a cross-platform GUI version using GTK+ or similar.

5. Related sites

IAPWS-IF97 steam tables
IAPWS paper from Journal of Engineering for Gas Turbines and Power

Bernhard Spang's summary of IF97

IAPWS-95 scientific formulation

Surface tension


Rettig's units-of-measurement stuff

Brent solver

Free (in the OS sense) IAPWS calculators
jSteam (a Java implementation, based on freesteam, GPL licensed)
IF97 (a Java implementation, LGPL licensed)
X Steam (for Excel, OpenOffice and Matlab, licensing unclear)
Bernhard Spang's IF-97 Excel plug-in (Visual Basic)
Leon Kos, University of Ljubljana: (Javascript)

Commercial IAPWS calculators
ChemicaLogic, USA: SteamTab SDK
University of Applied Sciences Zittau/Görlitz, Germany: FluidEXL
Edward Throm: ASTEM97
G&P Engineering: StmProps
Zittau/Goerlitz University of Applied Sciences: LibIF97
Wagner, Wolfgang, Kretzschmar, Hans-Joachim, International Steam Tables - The Industrial Standard IAPWS-IF97 for the Thermodynamic Properties and Supplemetary Equations for Other Properties: Tables, Algorithms, Diagrams, Software, 2nd ed., 2006 (!), Springer, Germany.
MegaWatSoft: Steam97
ARC Engineering plc: arcSteam
GP International: GPSteam ("ASME 97" formulation)
TechWare Engineering: WinSteam
Rudjer Boskovic Institute: ISANO Iapwsif97

Other steam calculators (Non IF97)
WinSim STEAM67 (ASME 1967 Steam Tables, with source code in C)
PARVO95, PARVO67 (Fortran) In Russian, not tested.
Taftan Thermo Utilities (IFC '67 correlation)

Some useful steam table charts
Copied from Reynolds' Thermodynamic Properties in SI, Stanford Univ, 1979:
h-s, p-h, T-s, v-u

Generally of interest about water and steam: LogoJohn Pye
Last modified: 25 February 2013