Comment calculer la viscosité de mélange d'Arrhenius en Python avec UliEngineering

Vous pouvez facilement calculer la viscosité d’un mélange à l’aide de la règle de mélange d’Arrhenius (logarithmique) avec la bibliothèque Python UliEngineering :

arrhenius_mixing_viscosity.py
from UliEngineering.Physics.Viscosity import arrhenius_mixing_viscosity
from UliEngineering.EngineerIO import *

# Calculer la viscosité du mélange pour un mélange binaire
mole_fractions = [0.5, 0.5]
viscosities = [1e-3, 5e-3]  # Pa·s
eta_mix = arrhenius_mixing_viscosity(mole_fractions, viscosities)
print(f"Viscosité du mélange binaire : {format_value(eta_mix, 'Pa·s')}")

# Calculer la viscosité du mélange pour un mélange ternaire
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"Viscosité du mélange ternaire : {format_value(eta_mix, 'Pa·s')}")

# Calculer la viscosité du mélange pour un composant pur
mole_fractions = [1.0, 0.0]
viscosities = [1e-3, 5e-3]  # Pa·s
eta_mix = arrhenius_mixing_viscosity(mole_fractions, viscosities)
print(f"Viscosité du composant pur : {format_value(eta_mix, 'Pa·s')}")

Exemple de sortie

arrhenius_mixing_viscosity_output.txt
Viscosité du mélange binaire : 2.24 mPa·s
Viscosité du mélange ternaire : 3.84 mPa·s
Viscosité du composant pur : 1.00 mPa·s

arrhenius mixing plot.svg

La règle de mélange d’Arrhenius est donnée par :

$$ \ln(\eta_{mix}) = \sum_{i} x_i \ln(\eta_i) $$

où $\eta_{mix}$ est la viscosité du mélange, $x_i$ est la fraction molaire du composant $i$, et $\eta_i$ est la viscosité du composant $i$.

Cela peut également s’exprimer comme :

$$ \eta_{mix} = \exp\left(\sum_{i} x_i \ln(\eta_i)\right) = \prod_{i} \eta_i^{x_i} $$

La règle de mélange d’Arrhenius est une règle de mélange logarithmique qui fournit de bonnes estimations de la viscosité du mélange lorsque les composants ont des structures moléculaires similaires. Elle est particulièrement utile pour les mélanges idéaux et est couramment appliquée en génie pétrolier, en science des polymères et en génie chimique.

Le graphique ci-dessus montre comment la viscosité du mélange varie lorsque la composition change pour un mélange ternaire. La viscosité du mélange suit une interpolation logarithmique (moyenne géométrique) entre les viscosités des composants purs. Remarquez que la viscosité du mélange se situe toujours entre les viscosités minimale et maximale des composants.

Cette règle de mélange suppose un comportement de mélange idéal et peut ne pas être précise pour des mélanges fortement non idéaux ou lorsqu’il existe des interactions moléculaires significatives entre les composants.

Articles liés


Script de génération du graphique

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

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

# Viscosités des composants (en Pa·s)
viscosities = [1e-3, 5e-3, 10e-3]  # Type eau, moyen, élevé

# Calculer la viscosité du mélange pour différentes compositions
n_points = 100
results = []

for i in range(n_points + 1):
    # Faire varier la composition de 100 % composant 0 à 100 % composant 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  # Convertir en mPa·s
    results.append(eta_mix)

plt.plot(np.linspace(0, 100, n_points + 1), results, color='blue', linewidth=2, label='Viscosité du mélange')

# Tracer également les viscosités individuelles des composants comme lignes horizontales
for i, eta in enumerate(viscosities):
    plt.axhline(y=eta * 1000, color=['green', 'orange', 'red'][i], linestyle='--', 
                linewidth=2, label=f'Composant {i+1} ({eta*1000:.1f} mPa·s)')

plt.xlabel('Fraction molaire du composant 1 (%)', fontsize=12)
plt.ylabel('Viscosité du mélange (mPa·s)', fontsize=12)
plt.title('Règle de mélange d\'Arrhenius pour un mélange ternaire', 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("Graphique enregistré dans arrhenius_mixing_plot.svg")

Check out similar posts by category: Physics, Python