#计算 #流体 #属性 #闪点 #pr #so2 #液态金属

程序+库 thermolib

一个用于计算流体属性的开放源代码库

8 个不稳定版本 (3 个破坏性更新)

0.7.1 2024 年 8 月 17 日
0.6.1 2024 年 8 月 9 日
0.6.0 2024 年 6 月 24 日
0.2.4 2024 年 3 月 27 日

301科学

Download history 122/week @ 2024-05-13 306/week @ 2024-05-20 167/week @ 2024-05-27 337/week @ 2024-06-03 390/week @ 2024-06-10 140/week @ 2024-06-17 151/week @ 2024-06-24 13/week @ 2024-07-01 15/week @ 2024-07-29 98/week @ 2024-08-05 315/week @ 2024-08-12

每月下载量 428 次

MIT 许可证

150KB
4K SLoC

thermolib

一个用于计算流体属性的开放源代码库。

Vdw

闪点计算 获取相应属性
t_flash(Ts) T_s()
p_s()
rho_v()
rho_l()
tp_flash(T,p) T()
p()
rho()
use thermolib::Vdw;

let Tc = 430.64; // K
let pc = 7886600.0; // Pa
let M = 0.064064; // kg/mol
let mut SO2 = Vdw::new_fluid(Tc, pc, M);
let _ = SO2.set_molar_unit();

if let Ok(_) = SO2.t_flash(273.15) {
    println!("T_s={}", SO2.T_s().unwrap());
    println!("p_s={}", SO2.p_s().unwrap());
    println!("rho_v={}", SO2.rho_v().unwrap());
    println!("rho_l={}", SO2.rho_l().unwrap());
}

SO2.tp_flash(273.15, 0.1e6);
println!("T={}", SO2.T().unwrap());
println!("p={}", SO2.p().unwrap());
println!("rho={}", SO2.rho().unwrap());

from thermolib import Vdw

Tc = 430.64
pc = 7886600
M = 0.064064
SO2 = Vdw(Tc, pc, M)
SO2.set_molar_unit()

SO2.t_flash(273.15)
print("T_s =", SO2.T_s())
print("p_s =", SO2.p_s())
print("rho_v =", SO2.rho_v())
print("rho_l =", SO2.rho_l())

SO2.tp_flash(273.15, 0.1e6)
print("T =", SO2.T())
print("p =", SO2.p())
print("rho =", SO2.rho())

Rk

闪点计算 获取相应属性
t_flash(Ts) T_s()
p_s()
rho_v()
rho_l()
tp_flash(T,p) T()
p()
rho()
use thermolib::Rk;

let Tc = 430.64; // K
let pc = 7886600.0; // Pa
let M = 0.064064; // kg/mol
let mut SO2 = Rk::new_fluid(Tc, pc, M);
let _ = SO2.set_molar_unit();

from thermolib import Rk

Tc = 430.64
pc = 7886600
M = 0.064064
SO2 = Rk(Tc, pc, M)
SO2.set_molar_unit()

Srk

闪点计算 获取相应属性
t_flash(Ts) T_s()
p_s()
rho_v()
rho_l()
tp_flash(T,p) T()
p()
rho()
use thermolib::Srk;

let Tc = 430.64; // K
let pc = 7886600.0; // Pa
let omega = 0.256;
let M = 0.064064; // kg/mol
let mut SO2 = Srk::new_fluid(Tc, pc, omega, M);
let _ = SO2.set_molar_unit();

from thermolib import Srk

Tc = 430.64
pc = 7886600
omega = 0.256
M = 0.064064
SO2 = Srk(Tc, Pc, omega, M)
SO2.set_molar_unit()

Pr

闪点计算 获取相应属性
t_flash(Ts) T_s()
p_s()
rho_v()
rho_l()
tp_flash(T,p) T()
p()
rho()
use thermolib::Pr;

let Tc = 430.64; // K
let pc = 7886600.0; // Pa
let omega = 0.256;
let M = 0.064064; // kg/mol
let mut SO2 = Pr::new_fluid(Tc, pc, omega, M);
let _ = SO2.set_molar_unit();

from thermolib import Pr

Tc = 430.64
pc = 7886600
omega = 0.256
M = 0.064064
SO2 = Pr(Tc, Pc, omega, M)
SO2.set_molar_unit()

Helmholtz

闪点计算 获取相应属性
t_flash(Ts) T_s()
p_s()
rho_v()
rho_l()
tp_flash(T,p) T()
p()
rho()
cv()
cp()
w()
use thermolib::Helmholtz;

let mut SO2 = Helmholtz::read_json("SO2.json").expect("no SO2.json");

if let Ok(_) = SO2.t_flash(273.15) {
    println!("T_s={}", SO2.T_s().unwrap()); // temperature = 273.15 K
    println!("p_s={}", SO2.p_s().unwrap()); // pressure = 0.15549e6 Pa
    println!("rho_v={}", SO2.rho_v().unwrap()); // vapor density = 71.106 mol/m3
    println!("rho_l={}", SO2.rho_l().unwrap()); // liquid density = 22403 mol/m3
}

if let Ok(_) = SO2.tp_flash(273.15, 0.1e6) {
    println!("T={}", SO2.T().unwrap()); // temperature = 273.15 K
    println!("p={}", SO2.p().unwrap()); // pressure = 0.1e6 Pa
    println!("rho={}", SO2.rho().unwrap()); // density = 45.093 mol/m3
    println!("cv={}", SO2.cv().unwrap()); // isochoric heat capacity = 31.953 J/mol/K
    println!("cp={}", SO2.cp().unwrap()); // isobaric heat capacity = 41.477 J/mol/K
    println!("w={}", SO2.w().unwrap()); // speed of sound = 209.41 m/s
}

from thermolib import Helmholtz

SO2 = Helmholtz("SO2.json")

SO2.t_flash(273.15)
print("T_s =", SO2.T_s())  # temperature = 273.15 K
print("p_s =", SO2.p_s())  # pressure = 0.15549e6 Pa
print("rho_v =", SO2.rho_v())  # vapor density = 71.106 mol/m3
print("rho_l =", SO2.rho_l())  # liquid density = 22403 mol/m3

SO2.tp_flash(273.15, 0.1e6)
print("T =", SO2.T())  # temperature = 273.15 K
print("p =", SO2.p())  # pressure = 0.1e6 Pa
print("rho =", SO2.rho())  # density = 45.093 mol/m3
print("cv =", SO2.cv())  # isochoric heat capacity = 31.953 J/mol/K
print("cp =", SO2.cp())  # isobaric heat capacity = 41.477 J/mol/K
print("w =", SO2.w())  # speed of sound = 209.41 m/s

液态金属

函数 单位
calc_rho(T) kg/m^3
calc_eta(T) mPa*s
calc_lambda(T) W/m/K
use thermolib::LiquidMetal;

if let Ok(metal) = LiquidMetal::new_metal("Si") {
    println!("rho = {}", metal.calc_rho(1800.0).unwrap()); // 2528 kg/m3
    println!("eta = {}", metal.calc_eta(1800.0).unwrap()); // 0.541 mPa*s
    println!("lambda = {}", metal.calc_lambda(1800.0).unwrap()); // 54.88 W/m/K
}

from thermolib import LiquidMetal

metal = LiquidMetal("Si")
print("rho =", metal.calc_rho(1800))  # 2528 kg/m3
print("eta =", metal.calc_eta(1800))  # 0.541 mPa*s
print("lambda =", metal.calc_lambda(1800))  # 54.88 W/m/K

依赖

~11–32MB
~480K SLoC