This is the C implementation of the high-speed IAPWS-IF97 package seuif97. It is suitable for computation-intensive calculations,such as heat cycle calculations, simulations of non-stationary processes, real-time process monitoring and optimizations.
Through the high-speed library, the results of the IAPWS-IF97 are accurately produced several times faster than repeated squaring method and math.pow()
of the C standard library.
The Fast Methods
- the shortest addition chain algorithm computes the integer power of a number quickly
- apply Horner's rule to compute a set of powers and avoid calculate the power of the same exponential once again
- the recursive method computes the value of multiple polynomials to avoid calculate the same item once again
In addition to the source code, the repository provides
-
the compiled shared libraries using GCC: /shared_lib/
-
the interfaces and examples of multiple programming languages: /demo/
- C/C++, Python, C#, Java, Excel VBA, MATLAB, Rust, Fortran, Pascal, Modelica
- make
make
- cmake
cmake -B ./build/
cmake --build ./build/ --config Release
The compiled shared libraries using GCC
-
Windows(x86/64):
libseuif97.dll
-
Linux(x64):
libseuif97.so
Functions of water and steam propertiesand the thermodynamic process of steam turbine are provided in the SEUIF97
Water and Steam Properties
Using the SEUIF97, you can set the state of steam using various pairs of know properties to get any output properties you wish to know, including in the 30 properties in libseuif97.
The following 12 input pairs are implemented:
(p,t) (p,h) (p,s) (p,v)
(t,h) (t,s) (t,v)
(p,x) (t,x) (h,x) (s,x)
(h,s)
The type of propertry functions are provided in the package
??(in1,in2,o_id)
- the first,second input parameters : the input propertry pairs
- the third input parametes: the property ID of the calculated property - o_id
- the return: the calculated property value of
o_id
Thermodynamic Process of Steam Turbine
-
Isentropic Enthalpy Drop:ishd(pi,ti,pe)
pi - inlet pressure(MPa); ti -inlet temperature(°C) pe - outlet pressure(MPa)
-
Isentropic Efficiency(0~100): ief(pi,ti,pe,te) (superheated steam zone)
pi - inlet pressure(MPa); ti - inlet temperature(°C) pe - outlet pressure(MPa); te - outlet temperature(°C)
The Function Prototype in C
// Functions of Properties
double pt(double p, double t, int o_id);
double ph(double p, double h, int o_id);
double ps(double p, double s, int o_id);
double pv(double p, double v, int o_id);
double th(double t, double h, int o_id);
double ts(double t, double s, int o_id);
double tv(double t, double v, int o_id);
double hs(double h, double s, int o_id);
double px(double p, double x, int o_id);
double tx(double t, double x, int o_id);
double hx(double h, double x, int o_id);
double sx(double s, double x, int o_id);
//The Functions for Thermodynamic Process of Steam Turbine
double ishd(double pi, double ti, double pe);
double ief(double pi, double ti, double pe, double te);
Use the shared library from one programming language, you may
-
Put the shared library in the default
Lib
path of OS or the programming language-
Windows(x86/64)
- copy
libseuif97.dll
in the Windows/x86 or Windows/x64 folder to a default path of Windows32/64's DLL:C:\Windows\System
- copy
-
Linux(x64)
- copy
libseuif97.so
in the Linux/x64 folder to a default path of Linux shared lib :/usr/lib
/
- copy
-
-
Add the API file of the programming language to its
API
path- The API paths of different programming languages are different,please refer to the Examples of different programming languages
You can modify these interfaces provided in the repository to your own APIs.
The Selected Examples
Python
C++
Propertry | Unit | Symbol | o_id |
---|---|---|---|
Pressure | MPa | p | 0 |
Temperature | °C | t | 1 |
Density | kg/m^3 | ρ | 2 |
Specific Volume | m^3/kg | v | 3 |
Specific enthalpy | kJ/kg | h | 4 |
Specific entropy | kJ/(kg·K) | s | 5 |
Specific exergy | kJ/kg | e | 6 |
Specific internal energy | kJ/kg | u | 7 |
Specific isobaric heat capacity | kJ/(kg·K) | cp | 8 |
Specific isochoric heat capacity | kJ/(kg·K) | cv | 9 |
Speed of sound | m/s | w | 10 |
Isentropic exponent | k | 11 | |
Specific Helmholtz free energy | kJ/kg | f | 12 |
Specific Gibbs free energy | kJ/kg | g | 13 |
Compressibility factor | z | 14 | |
Steam quality | x | 15 | |
Region | r | 16 | |
Isobaric cubic expansion coefficient | 1/K | ɑv | 17 |
Isothermal compressibility | 1/MPa | kT | 18 |
Partial derivative (∂V/∂T)p | m3/(kg·K) | (∂V/∂T)p | 19 |
Partial derivative (∂V/∂P)T | m3/(kg·MPa) | (∂V/∂P)T | 20 |
Partial derivative (∂p/∂t)v | MPa/K | (∂p/∂t)v | 21 |
Isothermal throttling coefficient | kJ/(kg·MPa) | δt | 22 |
Joule-Thomson coefficient | K/MPa | μ | 23 |
Dynamic viscosity | kg/(m·s) | η | 24 |
Kinematic viscosity | m^2/s | ν | 25 |
Thermal conductivity | W/(m.K) | λ | 26 |
Thermal diffusivity | um^2/s | a | 27 |
Prandtl number | Pr | 28 | |
Surface tension | mN/m | σ | 29 |
-
王培红,贾俊颖,程懋华. 水和水蒸汽热力性质IAPWS-IF97公式的通用计算模型[J]. 动力工程,2001,21(6):1564-1567 [ pdf ]
-
芮嘉敏,孙振业,程懋华. 基于最短加法链状态空间树的IAPWS-IF97快速计算方法[J]. 汽轮机技术,2017,59(4):245-247 [ pdf ]
- Cheng Maohua. (2023). The C implementation of the high-speed IAPWS-IF97 package: SEUIF97 (1.2.0). Zenodo. https://doi.org/10.5281/zenodo.8242452