How to compute Kestin viscosity in Python using UliEngineering

You can easily compute the Kestin viscosity correlation using the UliEngineering Python library. The Kestin correlation is a three-parameter model that provides accurate viscosity predictions for liquids:

kestin_viscosity.py
from UliEngineering.Physics.Viscosity import kestin_viscosity, CommonLiquids
from UliEngineering.EngineerIO import *

# Compute Kestin viscosity of water at 20°C
T = 20 + 273.15  # Convert to Kelvin
eta = kestin_viscosity(T, CommonLiquids.Water.kestin)
print(f"Water viscosity at 20°C: {format_value(eta, 'Pa·s')}")

# Compute Kestin viscosity of water at 50°C
T = 50 + 273.15
eta = kestin_viscosity(T, CommonLiquids.Water.kestin)
print(f"Water viscosity at 50°C: {format_value(eta, 'Pa·s')}")

# Using custom Kestin constants
from UliEngineering.Physics.Viscosity import KestinConstants
custom = KestinConstants(name="Custom liquid", A=1.0e-5, B=300.0, C=150.0)
eta = kestin_viscosity(300.0, custom)
print(f"Custom liquid viscosity at 300K: {format_value(eta, 'Pa·s')}")

Example output

kestin_viscosity_output.txt
Water viscosity at 20°C: 1.01 mPa·s
Water viscosity at 50°C: 549 µPa·s
Custom liquid viscosity at 300K: 1.00 mPa·s

kestin viscosity plot.svg

The Kestin correlation is given by:

$$ \eta = A \cdot \exp\left(\frac{B}{T - C}\right) $$

where $\eta$ is the dynamic viscosity, $T$ is the absolute temperature in Kelvin, and $A$, $B$, and $C$ are material-specific constants. The parameter $C$ represents a temperature offset below which the model is not valid.

The Kestin correlation is similar in form to the VFT equation but is often used for different applications and may provide better accuracy for certain fluids. It was developed through extensive research on fluid properties and is particularly useful for water and aqueous solutions.

The plot above shows the Kestin correlation for water over a temperature range from 0°C to 100°C. The model captures the exponential decrease in viscosity with temperature characteristic of liquids.

The UliEngineering library provides pre-defined Kestin constants for water through CommonLiquids.Water.kestin. Custom constants can be defined using the KestinConstants dataclass for other fluids.


Plot generation script

plot_kestin_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 (
    kestin_viscosity,
    CommonLiquids,
)

# Temperature range in Celsius for plotting
T_C = np.linspace(0, 100, 200)  # 0 to 100°C
T_K = T_C + 273.15  # Convert to Kelvin

# Create plot
plt.figure(figsize=(10, 6))

# Plot for water using Kestin correlation
eta = kestin_viscosity(T_K, CommonLiquids.Water.kestin) * 1000  # Convert to mPa·s
plt.plot(T_C, eta, label='Water', color='blue', linewidth=2)

plt.xlabel('Temperature (°C)', fontsize=12)
plt.ylabel('Dynamic Viscosity (mPa·s)', fontsize=12)
plt.title('Kestin Viscosity Correlation for Water', fontsize=14, fontweight='bold')
plt.legend(loc='upper right', fontsize=10)
plt.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('kestin_viscosity_plot.svg', format='svg', dpi=300)
print("Plot saved to kestin_viscosity_plot.svg")

Check out similar posts by category: Physics, Python