H2C2O4 ⇄
HC2O4− +
H+ pKa1 = 1.3 (r 6A)
HC2O4− ⇄
C2O42− +
H+ pKa2 = 4.3 (r 6B)
H2SO4 ⇄ HSO4− +
H+ pKa3 = −9 (r 6C)
HSO4− ⇄
SO42− + H+ pKa4 =
2 (r 6D)
Mn3+ + C2O42− ⇄
[Mn(C2O4)]+ KE (r 6E)
[Mn(C2)]4)]+
+ C2O42− ⇄
[Mn(C2O4)2]− KF (r
6F)
[Mn(C2O4)]+ → Mn2+ +
CO2 +
CO2•− kG (r 6G)
[Mn(C2O4)2]− →
Mn2+ + CO2 + CO2•− +
C2O42− kH (r 6H)
2CO2•− →
C2O42− kI (r 6I)
Le modèle de réduction du Mn(III) (r 6A-I) associe les réactions de réduction proprement dites (6G et 6H), relativement lentes, aux réactions réversibles rapides de dissociation des deux diacides et de formation des complexes III1 et III2 avec l'ion oxalate. Ces équilibres sont déplacés au cours de la réaction, tout en restant pratiquement à l'équilibre.
Dans cette situation, à cause de la coexistence de ces échelles de temps très différentes, des problèmes numériques peuvent apparaître. Afin de les éviter, mais également parce que cela correspond à la situation physique réelle, ces équilibres rapides doivent être pré-établis avant le commencement de la réaction proprement dite. Autrement dit, les vraies concentrations initiales seront celles qui résultent des différentes dissociations et complexations rapides (soit 9 concentrations différentes), et non les concentrations globales en acides oxalique et sulfurique et en Mn(III).
Une solution pour réaliser cela serait d'utiliser un premier programme calculant ces équilibres, lesquels seraient ensuite introduits comme concentrations initiales dans un deuxième programme, calculant la cinétique de la réaction proprement dite. Mais il est plus élégant, et beaucoup plus commode, de combiner ces deux opérations dans le même programme et de n'avoir à manipuler directement que les concentrations globales en acide oxalique et sulfurique.
Le principe est d'utiliser en premier lieu l'intégrateur srksta
pour obtenir l'équilibre, puis srkvi
pour la cinétique.
Mais les systèmes d'équations différentielles sont différents dans les deux
cas : il y a trois réactions (6G, 6H et 6I) et deux variables (Mn2+
et CO2•−) supplémentaires pour la cinétique.
- Le système complet, qui comporte 12 équations, est écrit dans la fonction
eqdiff
habituelle.
- Le système ne comportant que les équilibres, soit 10 équations, est écrit
dans une fonction que nous appelons pre_equilibre
, strictement
analogue à eqdiff
, c'est-à-dire de même
prototype : même nature (void
), même nombre et
nature d'arguments (Sa_data x, Sa_data* y, Sa_data* dy
).
L'identité de prototype est indispensable. Par contre les noms des
arguments, x
, y
, dy
, peuvent être
différents, comme d'ailleurs on peut leur donner des noms différents dans
eqdiff
. Le choix du nom d'une nouvelle fonction comme
pre-equilibre
est entièrement libre.
On pourrait utiliser aussi une seule fonction, eqdiff
, à la
manière de l'exercice 14.
Télécharger MnIII_pre_eq_10exp.cpp
La fonction fappel
est prévue pour plusieurs expériences
(boucle ligne 8) et fait apparaître clairement le calcul du pré-équilibre
(lignes 10 à 23) et de la cinétique (24 à 30) :
//----------------------------------------------------------------------------
1 void fappel()
2 {
3 for (int i = 0; i < np; ++i)
4 p[i] = fabs(p[i]);
5 //déclarations spécifiques pour srksta :
6 Sa_data ca1[NVAR][3];
7 Sa_data ind1[3];
8 for (int k = 0; k < nexp; k++)
9 {
10 // A - pré-équilibres H2C2O4/H2SO4/MnIII:
11 eq_system = pre_equilibre;
12 n_diff = 10;
13 // initialisation ca1 :
14 for (int j = 0; j < n_diff; ++j)
15 for (int m = 0; m < 3; ++m)
16 ca1[j][m] = 0;
17 ca1[0][0] = p[16+k]; // [H2C2O4] total initial
18 ca1[3][0] = p[26+k]; // [H2SO4] total initial
19 ca1[9][0] = p[36+k]; // [III] total initial
20 srksta(n_diff, ca1, ind1, 0, 0, 0, h0, tol, iset, jacob, h_compt, c_min);
21 // recopie de l'équilibre dans Ca
22 for (int j = 0; j < n_diff; ++j)
23 Ca(k,j,0) = ca1[j][2];
24 // B - cinétique :
25 eq_system = eqdiff;
26 n_diff = 12;
27 first_var = k*nv_mod;
28 srkvi(n_diff, &ca[first_var], ind, npt, h0, tol, iset, jacob, h_compt, c_min);
29 for (int i = 0; i < npt; ++i)
30 Ca(k,12,i) = p[15]*Ca(k,9,i); // Abs. due à [Mn(C2O4)2]- ; p[15] = l*epsilon
31 }
32 }
//----------------------------------------------------------------------------
Les appels de srksta
et de srkvi
sont regroupés
ici dans une même fonction fappel
, mais vous reconnaissez pour
chacun la façon habituelle de les utiliser. La seule nouveauté est
l'affectation successive des fonctions pre_equilibre
et
eqdiff
, aux lignes 11 et 25 respectivement, à la
variable-fonction eq_system
. En réalité, c'est
eq_system
que les deux intégrateurs appellent en interne. Mais
nous n'avons pas encore évoqué cette variable car la fonction
eqdiff
lui est affectée par défaut, rendant ce mécanisme invisible
dans les situations les plus habituelles. Naturellement, il faut accompagner
l'affectation de eq_system
de l'affectation correspondante de
n_diff
(lignes 12 et 26).
Noter que les deux parties (pré-équilibre et cinétique) écrivent leur
résultat dans la même table ca
: les variables sont réellement
communes, mais le pré-équilibre ignore les variables 10, 11 (Mn2+ et
CO2•−) et 12 (absorbance). De même, les
équations utilisent les mêmes constantes de vitesses.
Le fichier expérimental comportant 10 expériences, dans le fichier .sac, on a affecté p[26 à 25] aux 10 concentrations initiales d'acide oxalique total, p[26 à 35] à celles de l'acide sulfurique, et p[36 à 45] à celles du Mn(III), d'où l'initialisation des variables correspondantes aux lignes 17-19.
Le nombre d'expériences dans les fichiers en mode Multi est limité
à 10. Un avertissement est donné si l'on tente de mettre nexp
à
une valeur supérieure.
Télécharger MnIII_10exp_opt.sac Télécharger MnIII_10exp.exp
Le fichier MnIII_10exp_opt.sac contient les
paramètres, kG (p[12]
) et
kH(p[13]
) optimisés. Les autres paramètres sont fixés
aux valeurs de la littérature. Pour les réactions réversibles, les constantes
de vitesse sont fixées à des valeurs suffisamment élevées pour que la mise à
l'équilibre soit rapide devant la cinétique globale. Le rapport de la constante
dans le sens direct et dans le sens inverse est égal à la constante
d'équilibre. La constante ki a été fixée à 109
mol−1.L.
Le fichier expérimental, MnIII_10exp.exp, est en mode Multi et doit donc être lu comme tel. Les quatre premières expériences sont des cinétiques complètes données par l'absorbance à 456 nm (variable 12). Les six suivantes ne comportent qu'un seul point, correspondant au t1/2, où la valeur de III2 est la moitié de la valeur initiale (les quantités de III1 et de Mn3+ restent toujours très petites). Le calcul donnera la cinétique complète pour ces expériences et montrera qu'elles passent, ou non, par le point t1/2.
Vous observerez que les quatre cinétiques complètes, proches de l'ordre 1, ne sont pas parfaitement ajustées. Le point le plus important ici est d'obtenir le bon échelonnement des cinétiques en fonction des concentrations initiales, le but final recherché étant d'expliquer le comportement particulier de la réaction KMnO4 / H2C2O4 / H2SO4. Comme montré sur la figure VI.19, simple transcription des résultats de l'optimisation, l'echelonnement obtenu ici, avec un modèle réduit à un nombre minimum de réactions, est en accord avec l'expérience.