Comment calculer la viscosité de gaz de Sutherland en Python avec UliEngineering

Vous pouvez facilement calculer la viscosité de gaz de Sutherland en utilisant la bibliothèque Python UliEngineering. Le modèle de Sutherland est largement utilisé pour décrire la dépendance à la température de la viscosité des gaz :

sutherland_viscosity.py
from UliEngineering.Physics.Viscosity import sutherland_gas_viscosity, CommonGases
from UliEngineering.EngineerIO import *

# Calculer la viscosité de Sutherland de l'air à 20°C
T = 20 + 273.15  # Convertir en Kelvin
mu = sutherland_gas_viscosity(T, CommonGases.Air.sutherland)
print(f"Viscosité de l'air à 20°C : {format_value(mu, 'Pa·s')}")

# Calculer la viscosité de Sutherland de l'azote à 100°C
T = 100 + 273.15
mu = sutherland_gas_viscosity(T, CommonGases.Nitrogen.sutherland)
print(f"Viscosité de l'azote à 100°C : {format_value(mu, 'Pa·s')}")

# Utilisation de constantes de Sutherland personnalisées
from UliEngineering.Physics.Viscosity import SutherlandConstants
custom = SutherlandConstants(name="Custom gas", mu0=1.8e-5, T0=273.15, C=120.0)
mu = sutherland_gas_viscosity(300.0, custom)
print(f"Viscosité du gaz personnalisé à 300K : {format_value(mu, 'Pa·s')}")

Exemple de sortie

sutherland_viscosity_output.txt
Viscosité de l'air à 20°C : 18.3 µPa·s
Viscosité de l'azote à 100°C : 20.9 µPa·s
Viscosité du gaz personnalisé à 300K : 18.4 µPa·s

sutherland viscosity plot.svg

L’équation de Sutherland est donnée par :

$$ \mu = \mu_0 \cdot \frac{T_0 + C}{T + C} \cdot \left(\frac{T}{T_0}\right)^{3/2} $$

où $\mu$ est la viscosité dynamique, $T$ est la température absolue en Kelvin, $\mu_0$ est la viscosité de référence à la température de référence $T_0$, et $C$ est la constante de Sutherland spécifique à chaque gaz.

Contrairement aux liquides, la viscosité des gaz augmente avec la température en raison de l’augmentation du mouvement moléculaire et des collisions. Le modèle de Sutherland capture ce comportement avec précision pour une large plage de températures et est particulièrement utile pour les calculs d’ingénierie impliquant des gaz.

Le graphique ci-dessus montre le modèle de viscosité de Sutherland pour des gaz courants (Air, Azote, Oxygène, Dioxyde de carbone et Hélium) sur une plage de températures allant de 0°C à 1000°C. Remarquez que tous les gaz présentent une viscosité croissante avec la température, l’Hélium ayant la viscosité la plus élevée dans l’ensemble.

La bibliothèque UliEngineering fournit des constantes de Sutherland prédéfinies pour des gaz courants comme l’Air, l’Azote, l’Oxygène, le Dioxyde de carbone et l’Hélium via la classe CommonGases.

Articles liés


Script de génération du graphique

plot_sutherland_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 (
    sutherland_gas_viscosity,
    CommonGases,
)

# Plage de températures en Celsius pour le tracé (-273 à 1000°C comme suggéré)
T_C = np.linspace(0, 1000, 200)  # 0 à 1000°C
T_K = T_C + 273.15  # Convertir en Kelvin

# Créer le graphique
plt.figure(figsize=(10, 6))

# Tracé pour différents gaz courants
gases_to_plot = [
    ('Air', CommonGases.Air.sutherland, 'blue'),
    ('Nitrogen', CommonGases.Nitrogen.sutherland, 'green'),
    ('Oxygen', CommonGases.Oxygen.sutherland, 'red'),
    ('Carbon Dioxide', CommonGases.CarbonDioxide.sutherland, 'purple'),
    ('Helium', CommonGases.Helium.sutherland, 'orange'),
]

for name, constants, color in gases_to_plot:
    mu = sutherland_gas_viscosity(T_K, constants) * 1e6  # Convertir en µPa·s
    plt.plot(T_C, mu, label=name, color=color, linewidth=2)

plt.xlabel('Temperature (°C)', fontsize=12)
plt.ylabel('Dynamic Viscosity (µPa·s)', fontsize=12)
plt.title('Sutherland Gas Viscosity Model for Common Gases', fontsize=14, fontweight='bold')
plt.legend(loc='upper left', fontsize=10)
plt.grid(True, alpha=0.3)

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

Check out similar posts by category: Physics, Python