Как вычислить вязкость по VFT на Python с помощью UliEngineering
Можно легко вычислить вязкость VFT (Фогеля-Фулчера-Таммана) жидкостей с помощью библиотеки Python UliEngineering. Уравнение VFT — трёхпараметрическая модель, обеспечивающая отличную точность описания температурной зависимости вязкости, особенно для стеклообразующих жидкостей:
from UliEngineering.Physics.Viscosity import vft_viscosity, CommonLiquids
from UliEngineering.EngineerIO import *
# Вычислить вязкость VFT воды при 20°C
T = 20 + 273.15 # Преобразование в кельвины
eta = vft_viscosity(T, CommonLiquids.Water.vft)
print(f"Water viscosity at 20°C: {format_value(eta, 'Pa·s')}")
# Вычислить вязкость VFT этанола при 50°C
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')}")Пример вывода
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·sУравнение VFT задаётся формулой:
$$ \eta = A \cdot \exp\left(\frac{B}{T - T_0}\right) $$где $\eta$ — динамическая вязкость, $T$ — абсолютная температура в кельвинах, а $A$, $B$ и $T_0$ — специфичные для материала константы. Параметр $T_0$ называется температурой Фогеля и представляет температуру, при которой вязкость теоретически стремится к бесконечности.
Модель VFT особенно точна для стеклообразующих и переохлаждённых жидкостей, поскольку она описывает неаррениусовское поведение вблизи температуры стеклования. График выше показывает модель вязкости VFT для нескольких распространённых жидкостей в диапазоне температур от 0°C до 100°C.
Библиотека UliEngineering предоставляет предопределённые константы VFT для распространённых жидкостей, таких как вода, этанол, метанол, глицерин, оливковое масло, ртуть, ацетон и бензол, через класс CommonLiquids.
Связанные записи
- Как вычислить вязкость по Андраде на Python с помощью UliEngineering
- Как вычислить вязкость газа по Сазерленду на Python с помощью UliEngineering
- Как вычислить вязкость по Свинделлсу на Python с помощью UliEngineering
Скрипт для построения графика
#!/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 # Преобразование в мПа·с
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")