1 个稳定版本

1.1.4 2023 年 9 月 4 日
1.1.3 2023 年 9 月 3 日
1.1.1 2023 年 8 月 15 日

#71科学

MIT 许可证

310KB
7.5K SLoC

SEUIF97

docs.rs Build test PyPI Downloads Downloads DOI

这是高速 IAPWS-IF97 包 seuif97 的 Rust 实现,具有 C 和 Python 绑定。它适用于计算密集型计算,如热循环计算、非稳态过程模拟、实时过程监控和优化。

通过高速包,在计算区域 1、2、3 的基本方程时,与使用 Rust 标准库中的 powi()for 循环直接相比,IAPWS-IF97 的结果可以以大约 5-20 倍的速度准确产生。

快速方法

  1. 多步法在循环中使用 powi() 并利用编译器优化
  2. 递归法计算基本变量及其导数的多项式值

在该包中,可以计算 36 个热力学、输运和其他属性

实现了以下 12 组输入

(p,t) (p,h) (p,s) (p,v) 

(t,h) (t,s) (t,v) 

(p,x) (t,x) (h,x) (s,x) 

(h,s)  

用法

安装包

cargo add seuif97

包中提供了函数类型

struct o_id_region_args {
   o_id: i32,
   region: i32,
}

fn<R>(f64,f64,R) -> f64
where
    R: Into<o_id_region_args>,
  • 第一个、第二个输入参数(f64):输入属性对
  • 第三个和第四个输入参数
    • 第三个:计算属性的属性 ID - o_id
    • 第四个 option 参数:IAPWS-IF97 的区域
  • 返回(f64):o_id 的计算属性值
pt<R>(p:f64,t:f64,o_id_region:R)->f64
ph<R>(p:f64,h:f64,o_id_region:R)->f64
ps<R>(p:f64,s:f64,o_id_region:R)->f64
pv<R>(p:f64,v:f64,o_id_region:R)->f64

th<R>(t:f64,h:f64,o_id_region:R)->f64
ts<R>(t:f64,s:f64,o_id_region:R)->f64
tv<R>(t:f64,v:f64,o_id_region:R)->f64

hs<R>(h:f64,s:f64,o_id_region:R)->f64

px(p:f64,x:f64,o_id:i32)->f64
tx(p:f64,x:f64,o_id:i32)->f64
hx(h:f64,x:f64,o_id:i32)->f64
sx(s:f64,x:f64,o_id:i32)->f64

示例

use seuif97::*;
fn main() {
    
    let p:f64 = 3.0;
    let t:f64= 300.0-273.15;
   
    let h=pt(p,t,OH);
    let s=pt(p,t,OS);
    // set the region
    let v=pt(p,t,(OV,1));
    println!("p={p:.6} t={t:.6} h={t:.6} s={s:.6} v={v:.6}");   
}

C 绑定

构建动态链接库

  • cdecl
cargo build -r --features cdecl
  • stdcall:Win32 API 函数
cargo build -r --features stdcall

./dynamic_lib/ 提供了方便编译的动态链接库

C 语言的函数

double pt(double p,double t,short o_id);
double ph(double p,double h,short o_id);
double ps(double p,double s,short o_id);
double pv(double p,double v,short o_id);

double tv(double t,double v,short o_id);
double th(double t,double h,short o_id);
double ts(double t,double s,short o_id);

double hs(double h,double s,short o_id);

double px(double p,double x,short o_id);
double tx(double t,double x,short o_id);
double hx(double h,double x,short o_id);
double sx(double s,double x,short o_id);

示例

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define OH 4
#define OS 5

extern double pt(double p,double t,short o_id);

int main(void)
{
    double p = 16.0;
    double t = 530.0;
    double h = pt(p, t, OH);
    double s = pt(p, t, OS);
    printf("p,t %f,%f h= %f s= %f\n", p, t, h, s);
    return EXIT_SUCCESS;
}

Rankine 循环分析示例

Python 绑定

安装

pip install seuif97

示例

from seuif97 import *

OH=4

p=16.0
t=535.1
# ??(in1,in2,o_id)
h=pt(p,t,OH)
# ??2?(in1,in2)
s=pt2s(p,t)
print(f"p={p}, t={t} h={h:.3f} s={s:.3f}")

示例

T-S Diagram

属性

属性 单位 符号 o_id o_id(i32)
压力 MPa p OP 0
温度 °C t OT 1
密度 kg/m³ ρ OD 2
比体积 m³/kg v OV 3
比焓 kJ/kg h OH 4
比熵 kJ/(kg·K) s OS 5
比自由能 kJ/kg e OE 6
比内能 kJ/kg u OU 7
比定压热容 kJ/(kg·K) cp OCP 8
比定容热容 kJ/(kg·K) cv OCV 9
声速 m/s w OW 10
绝热指数 k OKS 11
比亥姆霍兹自由能 kJ/kg f OF 12
比吉布斯自由能 kJ/kg g OG 13
压缩因子 z OZ 14
蒸汽质量 x OX 15
区域 r OR 16
等压立方膨胀系数 1/K ɑv OEC 17
等温压缩系数 1/MPa kT OKT 18
偏导数 (∂V/∂T)p m³/(kg·K) (∂V/∂T)p ODVDT 19
偏导数 (∂V/∂p)T m³/(kg·MPa) (∂v/∂p)t ODVDP 20
偏导数 (∂P/∂T)v MPa/K (∂p/∂t)v ODPDT 21
等温节流系数 kJ/(kg·MPa) δt OIJTC 22
焦耳-汤姆逊系数 K/MPa μ OJTC 23
动力粘度 Pa·s η ODV 24
运动粘度 m²/s ν OKV 25
热导率 W/(m.K) λ OTC 26
热扩散率 m²/s a OTD 27
普朗特数 Pr OPR 28
表面张力 N/m σ OST 29
介电常数 ε OSDC 30
等容压力系数 1/K β OPC 31
等温应力系数 kg/m³ βp OBETAP 32
逸度系数 fi OFI 33
逸度 MPa f* OFU 34
相对压力系数 1/K αp OAFLAP 35

引用方式

依赖项

~0–5MB
~12K SLoC