如何使用 UliEngineering 在 Python 中计算 VFT 粘度
你可以使用 UliEngineering Python 库轻松计算液体的 VFT(Vogel-Fulcher-Tammann)粘度。VFT 方程是一个三参数模型,能够非常准确地描述粘度对温度的依赖关系,尤其适用于玻璃态液体:
vft_viscosity.py
from UliEngineering.Physics.Viscosity import vft_viscosity, CommonLiquids
from UliEngineering.EngineerIO import *
# 计算 20°C 时水的 VFT 粘度
T = 20 + 273.15 # 转换为开尔文
eta = vft_viscosity(T, CommonLiquids.Water.vft)
print(f"Water viscosity at 20°C: {format_value(eta, 'Pa·s')}")
# 计算 50°C 时乙醇的 VFT 粘度
T = 50 + 273.15
eta = vft_viscosity(T, CommonLiquids.Ethanol.vft)
print(f"Ethanol viscosity at 50°C: {format_value(eta, 'Pa·s')}")
# 使用自定义 VFT 常数
from UliEngineering.Physics.Viscosity import VFTConstants
custom = VFTConstants(name="Custom liquid", A=1.0e-5, B=500.0, T0=120.0)
eta = vft_viscosity(300.0, custom)
print(f"Custom liquid viscosity at 300K: {format_value(eta, 'Pa·s')}")示例输出
vft_viscosity_output.txt
Water viscosity at 20°C: 1.00 mPa·s
Ethanol viscosity at 50°C: 1.06 µPa·s
Custom liquid viscosity at 300K: 2.38 mPa·sVFT 方程由下式给出:
$$ \eta = A \cdot \exp\left(\frac{B}{T - T_0}\right) $$其中 $\eta$ 为动力粘度,$T$ 为开尔文绝对温度,$A$、$B$ 和 $T_0$ 为材料特定的常数。参数 $T_0$ 称为 Vogel 温度,表示粘度理论上会发散到无穷大的温度。
VFT 模型对玻璃态液体和过冷液体尤其准确,因为它能够捕捉玻璃化转变温度附近的非 Arrhenius 行为。上图展示了在 0°C 到 100°C 温度范围内若干常见液体的 VFT 粘度模型。
UliEngineering 库通过 CommonLiquids 类为水、乙醇、甲醇、甘油、橄榄油、汞、丙酮和苯等常见液体提供了预定义的 VFT 常数。
相关文章
- 如何使用 UliEngineering 在 Python 中计算 Andrade 粘度
- 如何使用 UliEngineering 在 Python 中计算 Sutherland 气体粘度
- 如何使用 UliEngineering 在 Python 中计算 Swindells 粘度
绘图生成脚本
plot_vft_viscosity.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 (
vft_viscosity,
CommonLiquids,
)
# 用于绘图的摄氏温度范围
T_C = np.linspace(0, 100, 200) # 0 到 100°C
T_K = T_C + 273.15 # 转换为开尔文
# 创建图形
plt.figure(figsize=(10, 6))
# 绘制不同常见液体的曲线
liquids_to_plot = [
('Water', CommonLiquids.Water.vft, 'blue'),
('Ethanol', CommonLiquids.Ethanol.vft, 'green'),
('Methanol', CommonLiquids.Methanol.vft, 'red'),
('Glycerol', CommonLiquids.Glycerol.vft, 'purple'),
]
for name, constants, color in liquids_to_plot:
eta = vft_viscosity(T_K, constants) * 1000 # 转换为 mPa·s
plt.plot(T_C, eta, label=name, color=color, linewidth=2)
plt.xlabel('Temperature (°C)', fontsize=12)
plt.ylabel('Dynamic Viscosity (mPa·s)', fontsize=12)
plt.title('VFT Viscosity Model for Common Liquids', fontsize=14, fontweight='bold')
plt.legend(loc='upper right', fontsize=10)
plt.grid(True, alpha=0.3)
plt.yscale('log') # 对数刻度,因为粘度跨越多个数量级
plt.tight_layout()
plt.savefig('vft_viscosity_plot.svg', format='svg', dpi=300)
print("Plot saved to vft_viscosity_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