# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from math import *
import scipy.optimize


import matplotlib
matplotlib.rcParams['mathtext.fontset'] = 'stix'
matplotlib.rcParams['font.family'] = 'STIXGeneral'

#%% DONNEES

Ks=1e-32 #produit de solubilité de Al(OH)3

beta4=1e34 #constante de formation du complexe [Al(OH)4]-

Ke=1e-14 #produit ionique de l'eau

#%% FONCTIONS

def s(h):
    #expression de la solubilité
        return Ks*(h/Ke)**3+Ks*beta4*Ke/h

def p(x):
    #expression du cologarithme de la solubilité
        return -np.log10(x)

H = np.linspace(1,1e-14,100) #début, fin, nombre de points
pH = np.linspace(0, 14, 100)

S=s(H) #On calcule une première fois avec les vrais points en H
min_s = scipy.optimize.fsolve(s,1e-5) #trouve les racines de la fonction s, ce qui revient à trouver le minimum de solubilité de Al(OH)3. Le deuxième argument correspond à une estimation de sa valeur.

print(p(min_s))

S=s(10**(-pH)) #On calcule une seconde fois avec les points « pratiques » pour le graphe

# pH=p(H)
pS=p(S)

#%% GRAPHE
print(H)
print(pH)

# plt.xlim(0,14)
# plt.ylim(0,7)
plt.title("Evolution du cologarithme de la solubilité de Al(OH)3 en fonction du pH")
plt.xlabel("pH")
plt.ylabel("pS")

# plt.xscale('log')
# plt.yscale('log')
pS = [0 if a < 0 else a for a in pS]
print(pS)
plt.plot(pH,pS)

plt.show()

#%% OPTIONNEL

#ax.grid(True) #Grille
#ax.legend(loc=2 ,prop={'size':20}) #Legende
