# -*- coding: utf-8 -*-
"""
Chapitre 3 - Prevoir un etat final avec Qr(x)
------------------------------------------------
Le script trace le quotient de reaction de la formation de FeSCN2+ en
fonction de l'avancement. L'etat final est repere par Qr(x_f) = K.

A ouvrir et executer dans EduPython (menu "Executer" ou touche F5).
Deux lignes sont a completer : l'expression de Qr(x) et la valeur de K.
"""

import matplotlib.pyplot as plt

# Quantites initiales dans V = 1,0 L (valeurs numeriques en mol et mol/L).
n_fe3 = 2.0e-3
n_scn = 1.0e-3
x_max = n_scn


K = 0.0  # A COMPLETER : constante d'equilibre

# Tableaux des avancements puis des Qr, valeur par valeur.
x = []
qr = []
for i in range(500):
    xi = 0.999 * x_max * i / 499
    Qri = 0.0 * xi  # A COMPLETER : expression de Qr pour l'avancement xi
    x.append(xi)
    qr.append(Qri)

# Le point du tableau le plus proche de l'intersection fournit x_f.
indice = 0
for i in range(len(qr)):
    ecart_i = qr[i] - K
    if ecart_i < 0:
        ecart_i = -ecart_i
    ecart_indice = qr[indice] - K
    if ecart_indice < 0:
        ecart_indice = -ecart_indice
    if ecart_i < ecart_indice:
        indice = i
x_f = x[indice]
print("avancement final lu : x_f =", x_f * 1e3, "mmol")

x_mmol = []
for xi in x:
    x_mmol.append(xi * 1e3)
plt.plot(x_mmol, qr, label="$Q_r(x)$")
plt.axhline(K, color="firebrick", linestyle="--", label="$K$")
plt.axvline(x_f * 1e3, color="gray", linestyle=":", label="$x_f$")
plt.xlabel("avancement x (mmol)")
plt.ylabel("$Q_r$")
plt.title("Recherche de l'etat final : $Q_r(x_f)=K$")
plt.grid(True)
plt.legend()
plt.show()
