{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Etude de l'évolution d'un système chimique (version élève) "
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ":download:`Télécharger le pdf <./suivi_avancement_eleve.pdf>`\n",
    "\n",
    ":download:`Télécharger le notebook <./suivi_avancement_eleve.ipynb>`\n",
    "\n",
    ":download:`Lancer le notebook sur binder (lent) <https://mybinder.org/v2/gl/pyspc%2Fpyspc/master?filepath=07-activites%2F00-terminale%2Fsuivi_avancement%2Fsuivi_avancement_eleve.ipynb>`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Ce programme permet d'étudier l'évolution des quantités de matière des réactifs et produits d'une réaction dont l'équation est du type :\n",
    "aA + bB -->   cC + dD\n",
    "où a, b, c et d sont les nombres stoechiométriques respectifs des espèces chimiques A, B, C et D.\n",
    "\n",
    "Le programme doit tout d'abord demander les valeurs des nombres stoechiométriques, pour ensuite demander les quantités de matière initiales des réactifs A et B et des produits C et D."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# rattachement des librairies gérant les tracés \n",
    "# de courbes et certains outils mathématiques \n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Entrée des nombres stoechiométriques**\n",
    "\n",
    "Sur le modèle de la ligne de code 2, ajouter les lignes de code nécessaires (lignes 3, 4 et 5) pour entrer les valeurs des nombres stoechiométriques b, c et d."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Nombres stoechiométriques\n",
    "a=2   #par exemple !! Donc à adapter...\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Affichage de l'équation de la réaction\n",
    "print(\"l'équation étudiée est du type : \",\n",
    "      a,\" A    +    \",b,\" B    -->     \",\n",
    "      c,\" C      +    \",d,\" D\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Entrée des valeurs de quantités de matière initiales**\n",
    "\n",
    "Les valeurs des quantités de matière initiales des réactifs et des produits (exprimées en mole) seront stockées dans des variables notées n_0\n",
    "\n",
    "(ex : nA_0 pour l'espèce chimique A).\n",
    "\n",
    "Sur le modèle de la ligne de code 2, ajouter les lignes de code nécessaires (lignes 3, 4 et 5) pour entrer les quantités de matière initiales des autres espèces chimiques en jeu.\n",
    "Attention de bien entrer les valeurs en mol! Vous pourrez par exemple taper 2.5e-3  pour 2,5 mmol"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Quantités de matières initiales\n",
    "nA_0 = \n",
    "nB_0 = \n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Initialisation des variables\n",
    "\n",
    "# Initialisation de la chaine de caractère correspondant \n",
    "# au réactif limitant\n",
    "Rlimitant =''  \n",
    "\n",
    "# Avancement initial\n",
    "x=0            \n",
    "\n",
    "# Pas d'avancement (on augmentera progressivement x de la valeur dx)\n",
    "dx=0.001       \n",
    "\n",
    "# Création des listes contenant les quantités de matière \n",
    "# et initialisation de ces listes avec la valeur initiale  \n",
    "nA=[nA_0]      \n",
    "nB=[nB_0]      \n",
    "nC=[nC_0]\n",
    "nD=[nD_0]\n",
    "\n",
    "# Création et nitialisation de la liste contenant l'avancement\n",
    "X=[x]          "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Calculs des quantités de matière en cours d'avancement**\n",
    "\n",
    "Sur le modèle de la ligne 5, écrire les lignes de code 6, 7 et 8 permettant de calculer les quantités de matière du\n",
    " réactif B, ainsi que des produits C et D.\n",
    " \n",
    " NOTE CODAGE : l'instruction \"nA.append(nA_0-a*x)\" permet d'ajouter la valeur indiquée entre parenthèses à la fin de la liste nA.\n",
    " \n",
    " **Détermination du réactif limitant**\n",
    "\n",
    "Compléter les tests des lignes de code 11 et 12 en choisissant parmi : <0, <=0, >0 et >=0.\n",
    "\n",
    "Compléter la ligne de code 13 en choisissant l'opérateur logique adéquat parmi : and (ET logique) et or (OU logique).\n",
    "\n",
    "NOTE CODAGE : l'indice -1 permet d'avoir accès à la dernière valeur de la liste.\n",
    "\n",
    "**Affichage du nom du réactif limitant et de l'avancement maximal**\n",
    "\n",
    "Il sera intéressant de modifier en ligne 18, le nombre de chiffres après la virgule afin de respecter le nombre de chiffres significatifs pour l'avancement x."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Calculs des quantités de matière en cours d'avancement\n",
    "while nA[-1] > 0 and nB[-1] > 0:\n",
    "    x=x+dx\n",
    "    X.append(x)\n",
    "    nA.append(nA_0-a*x)\n",
    "\n",
    "    \n",
    "    \n",
    "\n",
    "#Détermination du réactif limitant \n",
    "if nA[-1]                      : Rlimitant = 'A'\n",
    "if nB[-1]                      : Rlimitant = 'B'\n",
    "if nA[-1]<=0         nB[-1]<=0 : \n",
    "    Rlimitant='A et B : le mélange est stoechiometrique'\n",
    "        \n",
    "#Affichage des résultats\n",
    "print('Le réactif limitant est ',Rlimitant,\n",
    "      '\\n Avancement maximum : ','{0:.4f}'.format(x),\n",
    "      'mol' )\n",
    "#{0:.4f} permet d’afficher un nombre arrondi à \n",
    "# 4 chiffres après la virgule (ici)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Affichage des courbes permettant de suivre l'évolution des quantités de matière**\n",
    "\n",
    "La ligne de code 2 ci-dessous permet d'afficher le graphe de l'évolution de la quantité de matière de A en fonction de l'avancement X. \n",
    "\n",
    "Compléter les lignes 3, 4 et 5 pour afficher les courbes correspondant aux évolutions des quantités de matière des espèces chimiques B, C et D en fonction de l'avancement.\n",
    "\n",
    "NOTE CODAGE : la commande plt.plot peut être enrichie de divers arguments (comme ici avec r- = r pour red  et - pour ligne) :\n",
    " \n",
    "•\tCouleur : r (red), k (black), b (blue), y (yellow), g (green)\n",
    "\n",
    "•\tMarqueur : o (gros point), - (ligne), . (pointillé), x (croix), s (square), v (triangle)\n",
    "\n",
    "•   lw signifie linewidth (largeur de la ligne)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.figure(figsize=(10,10))\n",
    "plt.plot(X,nA,'r-',lw=1,label='nA')\n",
    "    \n",
    "    \n",
    "    \n",
    "plt.grid()\n",
    "plt.xlabel('x (mol)')\n",
    "plt.ylabel('n (mol)')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Modélisation des droites obtenues**\n",
    "\n",
    "Les lignes de code suivantes vont permettre de modéliser chacune des 4 droites obtenues sur le graphe ci-dessus.\n",
    "Ces droites sont de type linéaire ou affine et peuvent être modélisées avec un polynôme de degré 1 : mx+p (où x est à la puissance 1).\n",
    "Les résultats des quatre modélisations sont ensuite affichés pour analyse.\n",
    "\n",
    "Compléter les lignes de code 2, 3 et 4 (sur le modèle de la ligne 1) pour modéliser les courbes concernant l'évolution des quantités de matière des espèces chimiques B, C et D.\n",
    "\n",
    "NOTE CODAGE : .0f en lignes 8, 13, 18 et 23  signifie qu'il y aura 1 seul chiffre significatif (pas de chiffre après la virgule), alors que .3f en lignes 9, 14, 19 et 24 signifie qu'il y aura 3 chiffres après la virgule."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "Amodel=np.polyfit(X, nA,1)\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "print (\"la droite représentant l'évolution de nA\" \n",
    "       \" en fonction de x a pour équation : nA = \",\n",
    "       '{0:.0f}'.format(Amodel[0]),'{:5}'.format(\"x +\"),\n",
    "       \"{0:.3f}\".format(Amodel[1]) )\n",
    "\n",
    "print (\"la droite représentant l'évolution de nB\"\n",
    "       \" en fonction de x a pour équation : nB = \",\n",
    "       \"{0:.0f}\".format(Bmodel[0]),'{:5}'.format(\"x +\"),\n",
    "       \"{0:.3f}\".format(Bmodel[1]) )\n",
    "\n",
    "print (\"la droite représentant l'évolution de nC\"\n",
    "       \" en fonction de x a pour équation : nC = \",\n",
    "       \"{0:.0f}\".format(Cmodel[0]),'{:5}'.format(\"x +\"),\n",
    "       \"{0:.3f}\".format(Cmodel[1]) )\n",
    "\n",
    "print (\"la droite représentant l'évolution de nD\"\n",
    "       \" en fonction de x a pour équation : nD = \",\n",
    "       \"{0:.0f}\".format(Dmodel[0]),'{:5}'.format(\"x +\"),\n",
    "       \"{0:.3f}\".format(Dmodel[1])) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Commenter les équations des courbes modélisées...."
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Format de la Cellule Texte Brut",
  "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
}
