# Composition d'une solution d'acide éthanoïque -DL1 Septembre 2023
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import bisect

## Données :
pKe = 14
Ke=10**(-pKe)

##Equations vérifiées par h : introduire les équations Eq1 et Eq2 en conciderant C et Ka comme paramètres .
def Eq1(x,C,Ka):
    return (x**3+Ka*x**2-(Ka*C+Ke)*x-Ke*Ka)
def Eq2(x,C,Ka):
    return (x**2 +Ka*x-Ka*C)


##Résolution des équations et calcul de pH
def pH1(C,Ka):                 #résolution de Eq1  à l'aide de bisect
    h1=bisect(Eq1,1e-14,1,args=(C,Ka))
    return (-np.log10(h1))

def pH2(C,Ka):                 #résolution de Eq2  à l'aide de bisect
    h2=bisect(Eq2,1e-14,1,args=(C,Ka))
    return (-np.log10(h2))

def pH3(C,pKa):               #pH à partir de Eq3
    return 0.5*(pKa-np.log10(C))


## Valeurs exactes des avancements de réaction x1 et x2
def x1(C,Ka):
    h1=bisect(Eq1,1e-14,1,args=(C,Ka))
    return C*Ka/(h1+Ka)
def x2(C,Ka):
    h1=bisect(Eq1,1e-14,1,args=(C,Ka))
    return Ke/h1
print (x1(0.01,10**(-4.8)))
print (x2(0.01,10**(-4.8)))
print (x1(0.01,10**(-1.3)))
print (x2(0.01,10**(-1.3)))


## Tracé des courbes pH en fonction de pC  pour l'acide éthanoïque
pC=np.linspace(1,8,500)

Y1=[]
Y2=[]
Y3=[]

for i in range (len(pC)):
    Y1.append(pH1(10**(-pC[i]),10**(-4.8)))
    Y2.append(pH2(10**(-pC[i]),10**(-4.8)))
    Y3.append (pH3(10**(-pC[i]),4.8))


#tracé des courbes
plt.figure(0)
plt.plot(pC,Y1,'+b',markersize=1,label="Equation Eq1")
plt.plot(pC,Y2,'xr',markersize=1,label="Equation Eq2")
plt.plot(pC,Y3,'xg',markersize=1,label="Equation Eq3")
plt.xlabel("pC")
plt.ylabel("pH")
plt.grid()
plt.legend()

plt.show()


## Tracé des courbes pH en fonction de pC  pour l'acide dichloroéthanoïque
Y1b=[]
Y2b=[]
Y3b=[]
for i in range (len(pC)):
    Y1b.append(pH1(10**(-pC[i]),10**(-1.3)))
    Y2b.append(pH2(10**(-pC[i]),10**(-1.3)))
    Y3b.append (pH3(10**(-pC[i]),1.3))

plt.figure(1)
plt.plot(pC,Y1b,'+b',markersize=1,label="Equation Eq1")
plt.plot(pC,Y2b,'xr',markersize=1,label="Equation Eq2.")
plt.plot(pC,Y3b,'xg',markersize=1,label="Equation Eq3")
plt.xlabel("pC")
plt.ylabel("pH")
plt.grid()
plt.legend()
plt.show()



# Influence du pKa
X=np.linspace(1,14,500)

Y2c=[]
Y3c=[]
for i in range (len(X)):
    Y2c.append(pH2(0.001,10**(-X[i])))
    Y3c.append (pH3(0.001,X[i]))

plt.figure(2)
plt.plot(X,Y2c,'+b',markersize=1,label="EquationEq2")
plt.plot(X,Y3c,'xr',markersize=1,label="Equation Eq3")
plt.xlabel("pKa")
plt.ylabel("pH")
plt.grid()
plt.title("Influence du pKa pour C = 0,01 mol/L")
plt.legend()

plt.show()
