如何使用 UliEngineering 在 Python 中计算 Arrhenius 混合粘度
你可以使用 UliEngineering Python 库,通过 Arrhenius(对数)混合规则轻松计算混合物的粘度:
arrhenius_mixing_viscosity.py
from UliEngineering.Physics.Viscosity import arrhenius_mixing_viscosity
from UliEngineering.EngineerIO import *
# 计算二元混合物的混合粘度
mole_fractions = [0.5, 0.5]
viscosities = [1e-3, 5e-3] # Pa·s
eta_mix = arrhenius_mixing_viscosity(mole_fractions, viscosities)
print(f"二元混合物粘度:{format_value(eta_mix, 'Pa·s')}")
# 计算三元混合物的混合粘度
mole_fractions = [0.3, 0.3, 0.4]
viscosities = [1e-3, 5e-3, 10e-3] # Pa·s
eta_mix = arrhenius_mixing_viscosity(mole_fractions, viscosities)
print(f"三元混合物粘度:{format_value(eta_mix, 'Pa·s')}")
# 计算纯组分的混合粘度
mole_fractions = [1.0, 0.0]
viscosities = [1e-3, 5e-3] # Pa·s
eta_mix = arrhenius_mixing_viscosity(mole_fractions, viscosities)
print(f"纯组分粘度:{format_value(eta_mix, 'Pa·s')}")示例输出
arrhenius_mixing_viscosity_output.txt
Binary mixture viscosity: 2.24 mPa·s
Ternary mixture viscosity: 3.84 mPa·s
Pure component viscosity: 1.00 mPa·sArrhenius 混合规则由下式给出:
$$ \ln(\eta_{mix}) = \sum_{i} x_i \ln(\eta_i) $$其中 $\eta_{mix}$ 是混合物粘度,$x_i$ 是组分 $i$ 的摩尔分数,$\eta_i$ 是组分 $i$ 的粘度。
该式也可表示为:
$$ \eta_{mix} = \exp\left(\sum_{i} x_i \ln(\eta_i)\right) = \prod_{i} \eta_i^{x_i} $$Arrhenius 混合规则是一种对数混合规则。当各组分的分子结构相似时,它能很好地估算混合物粘度。它特别适用于理想混合物,在石油工程、聚合物科学和化学工程中应用广泛。
上图展示了三元混合物的混合粘度随组分变化的情况。混合物粘度在纯组分粘度之间按对数(几何平均)方式插值。可以看到,混合物粘度始终介于最小和最大组分粘度之间。
该混合规则假设混合行为是理想的。对于强非理想混合物,或组分间存在显著分子相互作用的情况,结果可能不够准确。
相关文章
- 如何使用 UliEngineering 在 Python 中计算 Andrade 粘度
- 如何使用 UliEngineering 在 Python 中计算 VFT 粘度
- 如何使用 UliEngineering 在 Python 中计算 Sutherland 气体粘度
绘图生成脚本
plot_arrhenius_mixing.py
#!/usr/bin/env python3
import matplotlib.pyplot as plt
import numpy as np
import sys
sys.path.insert(0, '/home/uli/dev/UliEngineering')
from UliEngineering.Physics.Viscosity import arrhenius_mixing_viscosity
# 创建图表
plt.figure(figsize=(10, 6))
# 组分粘度(单位 Pa·s)
viscosities = [1e-3, 5e-3, 10e-3] # 类水、中等、高
# 计算不同组分下的混合粘度
n_points = 100
results = []
for i in range(n_points + 1):
# 组分从 100% 组分 0 变化到 100% 组分 2
x1 = i / n_points
x2 = (1 - x1) / 2
x3 = (1 - x1) / 2
fractions = [x1, x2, x3]
eta_mix = arrhenius_mixing_viscosity(fractions, viscosities) * 1000 # 转换为 mPa·s
results.append(eta_mix)
plt.plot(np.linspace(0, 100, n_points + 1), results, color='blue', linewidth=2, label='Mixture viscosity')
# 同时将各组分粘度绘制为水平线
for i, eta in enumerate(viscosities):
plt.axhline(y=eta * 1000, color=['green', 'orange', 'red'][i], linestyle='--',
linewidth=2, label=f'Component {i+1} ({eta*1000:.1f} mPa·s)')
plt.xlabel('Component 1 Mole Fraction (%)', fontsize=12)
plt.ylabel('Mixture Viscosity (mPa·s)', fontsize=12)
plt.title('Arrhenius Mixing Rule for Ternary Mixture', fontsize=14, fontweight='bold')
plt.legend(loc='upper right', fontsize=10)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('arrhenius_mixing_plot.svg', format='svg', dpi=300)
print("图表已保存到 arrhenius_mixing_plot.svg")If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow