📄 Template de Fiche Descriptive — Script Python
🔷 INFORMATIONS GÉNÉRALES
Champ Détail
Nom du script script_210cvmn_210.py
Version 1.0.0
Date de création 22/05/2024
Auteur / Demandeur REFOIA JEREMY TECH
Objectif principal Modéliser et visualiser l’évolution temporelle des concentrations pour une réaction chimique consécutive de type Ak1Bk2C.
🎯 DESCRIPTION FONCTIONNELLE
📌 Que fait ce script ?
Le script définit une classe KineticSimulator qui résout numériquement un système d’équations différentielles ordinaires (EDO). Il calcule la disparition du réactif A, la formation puis la consommation de l’intermédiaire B, et l’accumulation du produit final C, tout en générant un graphique de synthèse.
📌 Problème résolu
Il permet d’étudier l’impact des constantes de vitesse (k1 et k2) sur le profil de concentration, facilitant la compréhension des phénomènes de régime stationnaire ou d’accumulation d’intermédiaires en cinétique chimique.
⚙️ SPÉCIFICATIONS TECHNIQUES
🐍 Environnement
Élément Valeur
Version Python 3.x
OS cible Tous (Windows / Linux / MacOS)
Mode d’exécution CLI / Script autonome
📦 Dépendances / Librairies
numpy : Manipulation des tableaux et génération d’intervalles de temps.
scipy (submodule integrate) : Utilisation de solve_ivp pour la résolution numérique.
matplotlib (submodule pyplot) : Génération des graphiques.
📥 ENTRÉES (INPUTS)
# Nom Type Obligatoire Description Exemple
1 k1 float ✅ Oui Constante de vitesse A→B 0.2
2 k2 float ✅ Oui Constante de vitesse B→C 0.1
3 initial_A float ❌ Non Concentration de départ de A (défaut=1.0) 10.0
4 t_span tuple ❌ Non Fenêtre de temps (tstart,tend) (0, 40)
📤 SORTIES (OUTPUTS)
# Nom Type Description Exemple
1 solution object Objet OdeResult de SciPy Contient les vecteurs t et y
2 Graphique Matplotlib Fenêtre interactive affichant les courbes de concentration (Fenêtre système)
🧱 STRUCTURE DU SCRIPT
script_210cvmn_210.py
│
├── 📌 IMPORTS (numpy, scipy, matplotlib)
├── 📌 CLASSE KineticSimulator
│ ├── __init__ → Initialisation des paramètres cinétiques
│ ├── ode_system → Définition des dérivées d[X]/dt
│ ├── simulate → Calcul numérique (RK45)
│ └── plot_results → Génération du rendu graphique
└── 📌 MAIN (Exemple d’exécution avec k1=0.2 et k2=0.1)
🔧 Détail des fonctions principales
Fonction Paramètres Retour Rôle
ode_system(t, y) t: float, y: list list Calcule les pentes à l’instant t pour A, B et C.
simulate(num_points) int object Lance l’intégrateur numérique sur l’intervalle donné.
plot_results() Aucun None Crée la figure et vérifie la conservation de la masse.
🔄 LOGIQUE / ALGORITHME
Initialisation : Définition des constantes de vitesse et des conditions initiales ([B]0=[C]0=0).
Résolution Numérique : solve_ivp utilise la méthode Runge-Kutta d’ordre 4/5 pour estimer les concentrations point par point.
Traitement : Extraction des vecteurs de résultats depuis l’objet de solution.
Vérification : Calcul de la somme [A]+[B]+[C] pour s’assurer qu’elle reste égale à [A]0 (conservation de la masse).
Rendu : Tracé des courbes avec légendes et grille.
🚨 GESTION DES ERREURS
Cas d’erreur Type d’exception Comportement attendu
Appel de plot avant simulate AttributeError (géré par if) Affiche un message d’erreur textuel.
Paramètres k négatifs Non géré La simulation divergera ou donnera des résultats physiquement impossibles.
✅ CONTRAINTES & RÈGLES MÉTIER
Règle 1 : La somme des concentrations doit être constante à tout instant t (loi de conservation).
Règle 2 : Le système suit une cinétique de premier ordre (v=k⋅[C]).
Règle 3 : Le solveur utilise par défaut la méthode RK45, adaptée aux systèmes « non-raides » (non-stiff).
🧪 TESTS ATTENDUS
# Cas de test Entrée Résultat attendu Statut
1 Cas nominal k1=0.2,k2=0.1 B atteint un pic puis redescend. 🟢 OK
2 Réaction rapide k1=10,k2=0.1 A disparaît quasi instantanément. ⬜ À tester
3 Conservation Somme A+B+C Doit être une ligne droite horizontale. 🟢 OK
📝 EXEMPLE D’UTILISATION
▶️ Lancement direct
Bash
python script_210cvmn_210.py
💻 Exemple d’appel en tant que module
Python
from script_210cvmn_210 import KineticSimulator
# Créer une instance personnalisée
sim = KineticSimulator(k1=0.5, k2=0.05, initial_A=5.0)
sim.simulate(num_points=500)
sim.plot_results()



Avis
Il n’y a pas encore d’avis.