import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = [10,7]
import numpy as np
##########################################################################
##### Fonction de calcul des quantités de matière avant l'équivalence ####
##########################################################################
def calcul_quantites_avant_et_a_equivalence(i): # Indentation de 4 espaces obligatoire pour une fonction
# Ajout à la liste des volumes le volume V versé pour V < VE
V.append(i)
# Ajout à la liste pour chaque valeur de V = i (en mL) des quantités de AH n_AH
n_AH.append((0.145*10-0.10*i)*0.001)
# Ajout à la liste pour chaque valeur de V = i (en mL) des quantités HO- n_HO
n_HO.append(0)
# Ajout à la liste pour chaque valeur de V = i (en mL) des quantités Na+ n_Na
n_Na.append(0.10*i*0.001)
# Ajout à la liste pour chaque valeur de V = i (en mL) des quantités A- n_A
n_A.append(0.10*i*0.001)
##########################################################################
##########################################################################
##### Fonction de calcul des quantités de matière après l'équivalence ####
##########################################################################
def calcul_quantites_apres_equivalence(i) :
# Ajout à la liste des volumes le volume V versé pour V > VE
V.append(i)
# Ajout à la liste pour chaque valeur de V = i (en mL) des quantités de AH n_AH
n_AH.append(0)
# Ajout à la liste pour chaque valeur de V = i (en mL) des quantités HO- n_HO
n_HO.append(0.10*i*0.001 - 0.00145)
# Ajout à la liste pour chaque valeur de V = i (en mL) des quantités Na+ n_Na
n_Na.append(0.10*i*0.001)
# Ajout à la liste pour chaque valeur de V = i (en mL) des quantités A- n_A
n_A.append(0.00145)
##########################################################################
##########################################################################
########################### Initialisation ###############################
##########################################################################
VE = 14.5 # Saisie du volume équivalent en mL
Veau = 200 # Saisie du volume d’eau ajouté en mL
n_AH, n_HO, n_Na, n_A, V = [], [], [], [], [] # Initialisation de 5 listes
##########################################################################
######## Calcul des quantités de matières par appel des fonctions ########
##########################################################################
for i in range(0,26,1) :
if i <= VE :
# Appel de la fonction qui calcule les quantités avant et à l’équivalence
calcul_quantites_avant_et_a_equivalence(i)
else :
# Appel de la fonction qui calcule les quantités après l’équivalence
calcul_quantites_apres_equivalence(i)
##########################################################################
################# Ligne de calcul de la conductivité #####################
##########################################################################
# Indentation pour rester dans la boucle for
Conduct = (20*np.array(n_HO)+5.0*np.array(n_Na)+4.1*np.array(n_A))/(0.010+Veau*1E-3+1E-3*np.array(V))
##########################################################################
############################## Affichage #################################
##########################################################################
# subplot(mnp) : m=nbre de colonnes pour les tracés | n=nbre de lignes | p=position
# À décommenter pour afficher plusieurs tracé
plt.subplot(122)
plt.plot(V, n_AH, 'bx-', linewidth=0.5, label="Courbe Bleue")
plt.plot(V, n_HO, 'rx-', linewidth=0.5, label="Courbe Rouge")
plt.plot(V, n_Na, 'mx-', linewidth=0.5, label="Courbe Mauve")
plt.plot(V, n_A, 'gx-', linewidth=0.5, label="Courbe Verte")
plt.subplot(121)
plt.scatter(V, Conduct, label="Conductivité en $\mathrm{mS\cdot m^{-1}}$")
plt.legend()
plt.show()