Giter Site home page Giter Site logo

seuif97's Introduction

SEUIF97

DOI

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

Building the shared library

  • make
make
  • cmake
cmake -B ./build/   
cmake --build ./build/ --config Release

The compiled shared libraries using GCC

Functions of the SEUIF97 Shared Library

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);

Install SEUIF97

Use the shared library from one programming language, you may

  1. 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
    • Linux(x64)

      • copy libseuif97.so in the Linux/x64 folder to a default path of Linux shared lib : /usr/lib/
  2. 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

Interfaces and Examples

Language Interface
C/C++ seuif97.h
Python seuif97.py
C# seuif97.cs
Excel VBA seuif97.bas
Java seuif97.java
MATLAB64 seuif97.m
Rust seuif97.rs
Fortran seuif97.f08
Pascal seuif97.pas
Modelica seuif97.mo

You can modify these interfaces provided in the repository to your own APIs.

The Selected Examples

Python

C++

Properties

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

Publications

  • 王培红,贾俊颖,程懋华. 水和水蒸汽热力性质IAPWS-IF97公式的通用计算模型[J]. 动力工程,2001,21(6):1564-1567 [ pdf ]

  • 芮嘉敏,孙振业,程懋华. 基于最短加法链状态空间树的IAPWS-IF97快速计算方法[J]. 汽轮机技术,2017,59(4):245-247 [ pdf ]

Cite as

seuif97's People

Contributors

100prznt avatar thermalogic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

seuif97's Issues

.net core library

@thermalogic @chengts95 my company has a Cross-platform project with .net core and want to use SEUIF97, can you provide the library with .net core 3.0?
Thank you and look forward to your reply!

Shorthand for saturation function?

Usually steam property lib may offer saturation functions, e.g. computing enthalpy of saturated water/steam. It is possible to pack such functions through current interfaces offered by SEUIF97 though, in Python for example:

import seuif97
pV2h = lambda p: seuif97.px2h(p, 1)  # compute enthalpy of saturated steam by pressure
pL2h = lambda p: seuif97.px2h(p, 0)  # compute enthalpy of saturated water by pressure

But it might be more convenient to have such interfaces in SEUIF97 itself ...

Source code for SEUIF97?

Hi,

Thanks for such a nice library.

Is it possible to add the library's source code to the repository? currently there is only precompiled binaries.

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.