{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Réactions acido-basiques\n",
    "## Taux d'avancement final de la réaction d'un acide faible sur l'eau\n",
    "\n",
    "$HA_{(aq)}+H_2O_{(l)}\\rightarrow A^{-}_{(aq)} + H_3O^{+}$"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ":download:`Télécharger le pdf <./taux-avancement.pdf>`\n",
    "\n",
    ":download:`Télécharger le notebook <./taux-avancement.ipynb>`\n",
    "\n",
    ":download:`Lancer le notebook sur binder (lent) <https://mybinder.org/v2/gl/pyspc%2Fpyspc/master?filepath=07-activites%2F00-terminale%2Ftaux-avancement%2Ftaux-avancement.ipynb>`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import des bibliothèques \n",
    "\n",
    "import numpy as np  # ou import math"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Première possibilité avec calcul des avancements final et maximal\n",
    "\n",
    "def taux (Ca, pKa, V):          # solution d'acide faible de concentration Ca et de volume V\n",
    "    Ka = 10**(-pKa)\n",
    "    xmax = Ca*V   # xmax = Ca*V\n",
    "    # Equation du second degré : (xf/V)**2 + Ka*xf/V-Ka*Ca=0\n",
    "    a = 1/(V**2)\n",
    "    b = Ka/V\n",
    "    c = -Ka*Ca\n",
    "    delta = b**2-4*a*c\n",
    "    xf1 = (-b-np.sqrt(delta))/(2*a)\n",
    "    xf2 = (-b+np.sqrt(delta))/(2*a)\n",
    "    if xf1<0:\n",
    "        xf=xf2\n",
    "    elif xf2<0:\n",
    "        xf = xf1\n",
    "    else :\n",
    "        xf = min(xf1,xf2)\n",
    "    taux = xf/xmax\n",
    "    print(\"L'avancement final vaut \",xf,\" mol\")\n",
    "    print(\"L'avancement maximal vaut\",xmax,\"mol\")\n",
    "    print(\"et le taux d'avancement final vaut \", taux,\" soit \",taux*100,\"%\")\n",
    "    return (xf,xmax,taux)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "L'avancement final vaut  5.5513986042768204e-05  mol\n",
      "L'avancement maximal vaut 0.002 mol\n",
      "et le taux d'avancement final vaut  0.0277569930213841  soit  2.77569930213841 %\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(5.5513986042768204e-05, 0.002, 0.0277569930213841)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Ca = 0.2  # concentration de la solution en acide faible apporté en mol/L\n",
    "pKa = 3.8 # pKa du couple acide faible/base faible\n",
    "V = 0.010 # Volume de la solution en L\n",
    "taux (Ca,pKa,V)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Deuxième possibilité avec calcul de la concentration effective finale des ions oxonium\n",
    "\n",
    "def taux (Ca, pKa):          # solution d'acide faible de concentration Ca \n",
    "    Ka = 10**(-pKa)\n",
    "   \n",
    "    # Equation du second degré : Coxonium**2 + Ka*Coxonium-Ka*Ca=0\n",
    "    a = 1\n",
    "    b = Ka\n",
    "    c = -Ka*Ca\n",
    "    delta = b**2-4*a*c\n",
    "    Coxonium1 = (-b-np.sqrt(delta))/(2*a)\n",
    "    Coxonium2 = (-b+np.sqrt(delta))/(2*a)\n",
    "    if Coxonium1<0:\n",
    "        Coxonium=Coxonium2\n",
    "    elif Coxonium2<0:\n",
    "        Coxonium = Coxonium1\n",
    "    else :\n",
    "        Coxonium = min(Coxonium1,Coxonium2)\n",
    "    taux = Coxonium/Ca\n",
    "    print (\" La concentration effective finale des ions oxonium vaut \",Coxonium,\" mol.L-1 \\n\"\n",
    "           \"et le taux d'avancement final vaut \", taux,\" soit \",taux*100,\"%\")\n",
    "    return (Coxonium,taux)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " La concentration effective finale des ions oxonium vaut  0.005551398604276821  mol.L-1 \n",
      "et le taux d'avancement final vaut  0.027756993021384103  soit  2.77569930213841 %\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(0.005551398604276821, 0.027756993021384103)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Ca = 0.2  # concentration de la solution en acide faible apporté en mol/L\n",
    "pKa = 3.8 # pKa du couple acide faible/base faible\n",
    "taux (Ca,pKa)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
