如何使用 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·s

Arrhenius 混合粘度图

Arrhenius 混合规则由下式给出:

$$ \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 混合规则是一种对数混合规则。当各组分的分子结构相似时,它能很好地估算混合物粘度。它特别适用于理想混合物,在石油工程、聚合物科学和化学工程中应用广泛。

上图展示了三元混合物的混合粘度随组分变化的情况。混合物粘度在纯组分粘度之间按对数(几何平均)方式插值。可以看到,混合物粘度始终介于最小和最大组分粘度之间。

该混合规则假设混合行为是理想的。对于强非理想混合物,或组分间存在显著分子相互作用的情况,结果可能不够准确。

相关文章


绘图生成脚本

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

Check out similar posts by category: Physics, Python