View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from
X Steam, Thermodynamic properties of water and steam.

4.2 | 49 ratings Rate this file 301 Downloads (last 30 days) File Size: 192 KB File ID: #9817 Version: 1.0
image thumbnail

X Steam, Thermodynamic properties of water and steam.


Magnus Holmgren (view profile)

  • 1 file
  • 4.15385


30 Jan 2006 (Updated )

Water properties A complete IAPWS IF-97 standard.

Editor's Notes:

This file was selected as MATLAB Central Pick of the Week

| Watch this File

File Information
Description, Steam and water properties for Matlab based on the "International Association for Properties of Water and Steam Industrial Formulation 1997 (IAPWS IF-97). A full implementation of the IF-97 standard that provides very accurate steam and water properties in ranges from 0-1000 bar and 0-2000°C. Provided thermodynamic properties are:

Specific volume
Specific entropy
Specific internal energy
Specific isobaric heat capacity
Specific isochoric heat capacity
Speed of sound
Vapour fraction

All properties can be calculated with the inputs, p and T known, p and h known, h and s known and some with pressure and density known. X Steam are a full implementation of the IF-97 formulation including all regions and all backward functions for good calculation speed. The code are speed optimized with pressure and enthalpy as inputs for dynamic simulations.

XSteam('h_pt',1,20) return the enthalpy of water at 1 bar and 20 degC. 84.0118 kJ/kg

XSteam('rho_ph',1,3000) return the density of steam at 1 bar and 3000 kJ/kg. 0.4056 kg/m3

XSteam('w_pt',1,20) returns the speed of sound at 1 bar and 20 deg C. 1483.4 m/s

XSteam('tSat_p',1) returns the saturation temperature at 1 bar. 99.6059 deg C

The X Steam Tables are the perfect tool both for replacing paper tables and for advanced calculations. The X Steam tables are open source and free of charge.

The X Steam tables are also available as MS Excel scripts, OOo Sripts, Dynamic Link Libary .DLL. Please visit

New version 2.5


This file inspired Diagrams Of Thermodynamic State Of Water, X Steam W A Vectorizing Wrapper For X Steam, Methane Solubility, Medium Model, Ideal Rankine Cycle, Ideal Regenerative Rankine Cycle, Ideal Reheat Rankine Cycle, Ideal Reheat Regenerative Rankine Cycle, Ideal Reheat Regenerative Rankine Cycle With One Open, One Closed Fwh, Ideal Regenerative Rankine Cycle With One Open, One Closed Fwh, Chen Correlation Wall Temperature Calculation, Water And Steam Refractive Index, Iapws If97 Functional Form With No Slip, and Ideal Rankine Cycle Gui.

MATLAB release MATLAB 6.0 (R12)
Other requirements None.
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (77)
14 Jan 2017 Jan Janosovsky

29 Dec 2016 Mostafa Ayman Mohamed Naguib Sadek

This is extremely helpful. Thank you :)

Comment only
15 Dec 2016 Leonardo Paoli

Good but it doesn't work foe temperatures above 800 C!

03 Nov 2016 mazen halasah

19 Sep 2016 daniel perez

31 May 2016 Antonio Cabrera García-Doncel

11 Apr 2016 Ihab Farag

Mon. April 11, 2016
When I try to run xsteam.m in r2016a I get the following error about fun
Not enough input arguments.

Error in XSteam (line 221)
welcome help in fixing this error.

Comment only
04 Apr 2016 rouf awad

fun is undefined word!!

??? Input argument "fun" is undefined.

Comment only
18 Mar 2016 Peter Pauska

thank you for this code!
is it possible to use vectors as in1&in2? if I do this, I will get a error message:

'Operands to the || and && operators must be convertible to logical scalar values.'

Comment only
07 Jan 2016 karthik aditya

29 Jun 2015 Kevin Schoonover

Is there any way to calculate or determine the Isentropic Expansion Exponent?

Comment only
05 Jan 2015 simone

simone (view profile)

I need the density of steam in the T interval 1273 K-1873 K and P 0.1-300 MPa. XSteam provides desnity for T up to 2000 C but for P<100 bar. Any suggestion?

Comment only
15 Aug 2014 Mark Mikofski

Mark Mikofski (view profile)

If you are looking for an alternative to XSteam, please consider - - it is vectorized, more current, and documented here:

Comment only
31 Jul 2014 bouazza brahim

Hello Sir,
I wanna know the function Xsteam use as input value SI values, because in the pdf theres is a table with the units but i dont know if they are units of the input or the outputs.


Comment only
24 Mar 2014 Sampath

is showing as NaN. Please let me know the reason.

Not only density but all other properties are being shown as NaN

Comment only
23 Feb 2014 Tarek Sobh

Thank you Magnus for this. I would like to use this with Simulink, however, I'm not able to.. The code I'm using is as follows but I'm getting errors:

function h10 = fcn(t10)

Would appreciate if anyone can help.

16 Feb 2014 SteamTable

I can not connect to x steam site. Got the following error message:

Oops! Internet Explorer could not connect to
Try reloading: www.­x-­eng.­com


Comment only
11 Nov 2013 Mark Mikofski

Mark Mikofski (view profile)

You might be able to increase speed for long loops by calling XSteam using arrayfun ( or use IAPWS_IF97 (

Comment only
11 Nov 2013 Mark Mikofski

Mark Mikofski (view profile)

@Daniel Vecchio - you might try NIST Chem WebBook (, EES from the University of Wisconsin (, TRNSYS also from Wisconsin ( or Aspen ( Good luck and post your findings to help others.

Comment only
28 Oct 2013 Daniel Vecchio

Hello, Excellent material!.

I'm looking for a similar tool to get the properties of refrigerants.
Do you know if there is something availbale?


Comment only
25 Oct 2013 Mark Mikofski

Mark Mikofski (view profile)

To get the help for both XSteam and XSteamUS, you need to open the source and delete the first three lines, or at least the blank lines. MATLAB will only return help using the first connected block of comments, but both XSteam and XSteamUS have a blank line after `%h_prho behöver T_prho för samtliga regioner!!!!` hence that is the only line returned as "help".

Comment only
25 Oct 2013 Mark Mikofski

Mark Mikofski (view profile)

Excellent resource, but would be better if vectorized and if it had thermodynamic derivatives for computational modeling.

25 Oct 2013 Mark Mikofski

Mark Mikofski (view profile)

Open the source, look at lines 23-41, the units for each file are there


%*** Nomenclature ******************************************************************************************
% First the wanted property then a _ then the wanted input properties.
% Example. T_ph is temperature as a function of pressure and enthalpy.
% For a list of valid functions se bellow or XSteam for MS Excel.
% T Temperature (deg C)
% p Pressure (bar)
% h Enthalpy (kJ/kg)
% v Specific volume (m3/kg)
% rho Density
% s Specific entropy
% u Specific internal energy
% Cp Specific isobaric heat capacity
% Cv Specific isochoric heat capacity
% w Speed of sound
% my Viscosity
% tc Thermal Conductivity
% st Surface Tension
% x Vapour fraction
% vx Vapour Volume Fraction

Comment only
20 Oct 2013 Isaac

Isaac (view profile)

using 'help XSteam' or 'help XSteamUS' does not output the units used:

>> help XSteamUS
h_prho behöver T_prho för samtliga regioner!!!!

>> help XSteam
h_prho behöver T_prho för samtliga regioner!!!!

I found the SI units in the pdf but how do I find out what the imperial units are?

Comment only
14 Oct 2013 Mark Mikofski

Mark Mikofski (view profile)

@AntoineTambue "XSteamUS" uses Imperial units, whereas "XSteam" (w/o "US") uses SI or metric units. Type `help XSteam` or `help XSteamUS` to see the units used.

Comment only
11 Oct 2013 Mark Mikofski

Mark Mikofski (view profile)

I know this is an oldie but goodie, and I greatly appreciate Magnus Holmgren's work. Therefore I humbly submit IAPWS_IF97.m ( which is inspired by XSteam, but completely reworked using IAPWS original to be vectorized and to include derivatives w.r.t. enthalpy and pressure. If you have comments on IAPWS_IF97.m, I would love to hear them. Thanks for your consideration.

Comment only
09 Oct 2013 Yannick MORIN

Good tool

05 Sep 2013 nathan q

nathan q (view profile)

09 Aug 2013 Antoine Tambue

Hello, There are two functions XSteam and XSteamUS. What is the difference between the two functions? I have tested the two functions and they give me different answers.

23 May 2013 Ali

Ali (view profile)

the best tool ever used !

05 Apr 2013 Leon

Leon (view profile)

Very good tool!
Excellent to have it condensed in a single .m file.

28 Feb 2013 Manel Soria

Excellent !!

25 Feb 2013 Rory

Rory (view profile)

Excellent work! You have made my life immeasurably easier with this great tool!

15 Jan 2013 Vesa

Vesa (view profile)

A remark Concerning my previous comment:
The code calculates tcL and tcV as it should.
Only the documentation is vice versa.

Comment only
15 Jan 2013 Vesa

Vesa (view profile)

In 19.7.2006 "X Steam for Matlab.pdf" and in 4.5.2007 "XSteam.m" comment lines 139-142:
%tcL_p Saturated vapour thermal conductivity
%tcV_p Saturated liquid thermal conductivity
%tcL_T Saturated vapour thermal conductivity
%tcV_T Saturated liquid thermal conductivity

Should be;
%tcL_p Saturated liquid thermal conductivity
%tcV_p Saturated vapour thermal conductivity
%tcL_T Saturated liquid thermal conductivity
%tcV_T Saturated vapour thermal conductivity
, I guess?

Comment only
13 Dec 2012 Thomas Clark


Thank you for this thorough implementation with excellent help!


04 Dec 2012 marco ricotti

13 Nov 2012 SooYoung Kang

Exactly what I needed, many thanks

27 Jun 2012 Mariano Nemec

ciao Magnus,

I appreciated and used your excell worksheet many years ago (vers. 2.6).

there is a new version, and from where can I get it?

14 Jun 2012 Dan Etenberg

Hello, the program is great, but I need to compute steam and ice values under 0ºC. Can anybody help me PLEASE?

24 Mar 2012 Andrew Yablokov

How to use XSteam in Simulink?

Comment only
19 Mar 2012 Mark Mikofski

Mark Mikofski (view profile)

Thank you Magnus Holmgren for you outstanding work! Using your work as a inspiration, I completely re-coded all of the IAPWS IF97 (except region 5) and including some of the most recent documentation including thermodynamic derivatives which I needed for some non-linear 2-phase modeling. I have finally posted it here:
It is vectorized and fully tested, according to the test points in IF97 and accompanying documents and the numerous simulations I have performed using it. I hope you find it as useful as I have.

Comment only
09 Nov 2011 Andrea Baricci

10 Mar 2011 Morgan May

Very awesome, I was working on something similar myself, when i stumbled upon this. Talk about a time saver, I do have one question, in line 2496 Should the program read High_Bound = 2563.59200e+5 instead of High_Bound = 2563.592004+5?? Just curious.

09 Feb 2010 Jason Wang

OMG. This program saves me so much time on each thermodynamics homework. Thanks so much!

03 Mar 2009 Patrik

Patrik (view profile)

Solid and precise, thank you.

17 Sep 2008 aman brar

Awesome...This is exactly what I was looking for.

19 Jun 2008 ashek ullah

So many thank for your information?

Comment only
05 Jun 2008 Xiangbin zhu

Thanks a lot!

07 Mar 2008 William Hounks

Beau travail

18 Feb 2008 Lourenco Crawford

very good!! thank you very much!

18 Feb 2008 Lourenco Crawford

very good!! thank you very much!

13 Nov 2007 Bogdan Marcu

Exactly what I needed, many thanks

31 Jul 2007 Jonas Andersson

Just what I need

23 Nov 2006 mario lebbe

16 Nov 2006 Magnus Holmgren

Comment to review bellow. Temperature lines does off course break at the saturation line on ph diagrams. (However h_pt is not valid for mixtures of steam and water since temperature do not vary with enthalpy in that region. Answer becomes NaN. Temperature can?t be the saturation temp of p since then h is undefined.) I think you mixed up the numbers a little to.

XSteamUS('pSat_t',700) = 3.0928896229137e+03 psia
XSteamUS('hV_t',700) = 9.9063684424454e+02 btu/lb
XSteamUS('hV_p',3.0928896229137e+03) = 9.9063684424454e+02 btu/lb

Comment only
14 Nov 2006 Allan Zadiraka

Very happy to find steam properties as good as this. Saved me from having to create my own again. Only problem is the temperature lines not breaking at the saturation line on ph diagrams (in english units)at higher pressures; sat line at 3097 psia gives 989.2 BTU/Lb versus 981.5 BTU/Lb for 3097 psia and 700F.

27 Sep 2006 David Andersson

Simple, exact.

26 Sep 2006 mohammad kazemi

14 Sep 2006 pippo pluto

29 Jun 2006 Giovani Tonel

On line 1428 ==> err=check();

Comment only
24 Jun 2006 Jim Mechell

This is an extraordinary and excellent effort. In particular the ablity to obtain properties as functions P and h, h and s.
However it is not clear how the author has stated that properties can be found upto 2000 degree celcius if they are based on IF 97. These to my knowledge are applicable upto 800 degree celcius only. Students would still require a compact printed steam table that they can carry to a test or examination.An excellent new one called "Engineering Steam Tables"by Ashok Malhotra is now available for the purpose at (type the title in their search box to locae it)

16 Jun 2006 TATEK ZEWDIR

I NEED HELP.................

Comment only
07 Jun 2006 Dave Abramovich

Very useful. Author must have had a lot of spare time, 150kb of code isn't a few hours job.

12 May 2006 zhu jian

General Conmments

Comment only
20 Apr 2006 Poomjai Sa-adchom

I like this program

01 Mar 2006 Jeff Buske

very nice piece of work! Well done.

25 Feb 2006 Tamir Suliman

Great program and excellent structure.

16 Feb 2006 Mike Baldea

Excellent work. Thank you.

06 Feb 2006 donghui zheng

06 Feb 2006 John McKenzie

Water data that really will save me a lot of work writing tables for interpolation into my program. A really great program!
I have two minor improvements:
- I would like the different functions as separate m files rather than commands.
- I agree with the previous reviewers that it would nice if the functions where vectorized.
However that?s minor problems, the program does what it?s supposed to and it?s simple to use and well structured. The program is worth a five star.

01 Feb 2006 Duane Hanselman

1 star just to balance the author giving himself a 5 star rating. Thanks for the advice Urs!

01 Feb 2006 urs (us) schwarz

it's ok - BUT (and this is a big BUT) - in the future, do NOT give your OWN submission(s) a rating of 5/5; some people might get really offended and nasty with this inappropriate behavior

Comment only
01 Feb 2006 Magnus Holmgren

I finally succeded in adding my file and I appriciate all the positive ratings the first day.
I'll consider to vectorize the functions.
The X Steam for MS Excel and the "spiffy figure" is also open source and can be downloaded from but I will add them to the ZIP file the next time I update it.

01 Feb 2006 Johan Karlsson

Simple and gives exact accurate results.

31 Jan 2006 John D'Errico

If you were to call this inside a long loop, the lack of vectorization might slow things down. However, thats the only reason why I might choose to downrate this at all. The documentation is far above average, so its still a 5 in my book.

31 Jan 2006 urs (us) schwarz

really nice result of a project
- extraordinary help (including PDF, to boot)
it would be even nicer
- if it was vectorized
- if the spiffy figure could be reproduced easily (see above)
- if the ...XSteam macros for MS Excel... (as mentioned in the help section) came with the package
but this is just ranting a bit

21 Feb 2006

Version 2.2
* Added function:
  * p_hrho
  * Prandtl number added
* Extensive testing.
* Fixed error in Cp_ph

15 Jun 2006

* English Units implemented!!!
* Fixed small error in region_ph speed up functions.
* my_ph not defined in region 4.

19 Jul 2006

Extensive testing.
Fixed missing ;.
Calling functions by pressure and density.

02 Nov 2006

Update of unit error for function T_ps for mixture of steam and water.
Only important for english units.

15 Jan 2007

New release with minor updates.

Contact us