### Importation des bibliothèques
from math import log10
import matplotlib.pyplot as plt

### Définition des variables
VE=6#volume équivalent en L
Vtitrée=10#volume du réactif titré en L
Ctitrante=0.1
compteur=0    #initialisation d'un compteur

### Calcul de grandeurs
nHOinitial=Ctitrante*VE*0.001 #calcul de la quantité en mol d'ions hydroxyde
#définition du volume maximal Vmax à introduire dans l'effluent en solution commerciale correspondant à une quantité double de H3O+ par rapport au mélange stoechiométrique
Vmax=25

### Initialisation des listes de quantités de HO-, H+, de pH et de volume V versé
nHO, nH, pH, V = [nHOinitial], [0], [-log10(1E-14/(nHOinitial/(Vtitrée*0.001)))], [0] # initialisation des listes de concentration en quantité des ions hydroxyde HO-, hydronium H3O+ et de la liste pH

### Remplissage des listes
while compteur <= Vmax :
    compteur=compteur+1
    aux=nHOinitial-0.1*compteur*0.001
    if aux > 0 :
        nHO.append(aux)
        nH.append(0)
        V.append(compteur)
        pH.append(- log10(1E-14/(aux/(Vtitrée*0.001+compteur*0.001))))   #expression du pH si on connaît [HO-]
    elif 0.1*compteur*0.001-nHOinitial > 0 :
        nHO.append(0)
        nH.append(0.1*compteur*0.001-nHOinitial)
        V.append(compteur)
        pH.append(- log10(nH[compteur]/(Vtitrée*0.001+compteur*0.001)))
    else :
        nHO.append(0)
        nH.append(0)
        V.append(compteur)
        pH.append(7)

### Affichage des graphiques
plt.figure(figsize=(16,8))
plt.subplot(121)
plt.plot(V, nHO, 'bx-', label="$n(\mathrm{HO^-})$ en mol")
plt.plot(V, nH, 'rx-', label="$n(\mathrm{H_3O^+})$ en mol")
plt.xlabel("volume en mL")
plt.ylabel('$n$ (mol)')
plt.legend()
plt.subplot(122)
plt.ylim(0,14) #définition des valeurs max et min des ordonnées
plt.plot(V, pH, 'rx-', label="pH")
plt.xlabel("volume en mL")
plt.ylabel('$pH$')
plt.legend()
plt.show()
