├── L2_AN_5_equations_5_inconnus.ipynb ├── L2_Bilan sur un separateur (mass balance).ipynb ├── L2_EX1_quantite_composition_melange_eau_ethanol.ipynb ├── L2_EX2_debits_d_air.ipynb ├── L2_EX3_melange_lait_creme.ipynb ├── L2_EX4_Rein_artificiel.ipynb ├── L2_EX5_Reacteur_continu.ipynb ├── L2_Ex8_Cinetique_Enzymatique.ipynb ├── L2_Rein_artificiel.ipynb ├── L2_debits.ipynb ├── L2_eau_douce_par_evaporation.ipynb ├── L2_production_osmose_inverse.ipynb ├── L2_quantite_composition.ipynb ├── L2_voiture_electrique_puissance_et_energie.ipynb ├── L3 Chute bille.ipynb ├── L3_sep1_Liquid_Vapor equilibrium.ipynb ├── L3_sep2_Liquid_Vapor equilibrium.ipynb ├── L3_sep3_Liquid_Liquid_equilibrium.ipynb ├── L3_sep4_Adsorption.ipynb ├── L3_sep5_electrophoresis.ipynb ├── L3_sep6_Donnan.ipynb ├── L3_sep7_settling.ipynb ├── L3_sep8_capture_CO2.ipynb ├── L3_sep9_Liquid_Liquid_equilibrium.ipynb ├── M Colonne.ipynb ├── M1 Adsorption à la surface d’une sphere.ipynb ├── M1 Transfert d oxygene dans un biofilm.ipynb ├── M1_Dispersion&Chromatographie.ipynb ├── M1_Réaction_gaz_liquide.ipynb ├── M1_catalyseur.ipynb ├── M1_cristal.ipynb ├── M1_electrochimie.ipynb ├── M1_fruit_juice_UF_eng.ipynb ├── M1_ultrafiltration-partiel.ipynb ├── M1_ultrafiltration.ipynb ├── M2_Colloid_DLVO.ipynb ├── M2_Colloid_double_layers.ipynb ├── M2_IngBioMed_TD1_Estimation_surface_glomérulaire.ipynb ├── M2_IngBioMed_TD2_Diagnostic_insuffisance_renale.ipynb ├── M2_IngBioMed_TD3_Estimation_temps_dialyse.ipynb ├── M2_IngBioMed_TD4_Efficacite_mixed_matrice_membrane.ipynb ├── M2_Osmotic_pressure_and_Transport.ipynb ├── M2_electrocinetique_exo1-3.ipynb ├── M2_metallisation_exam.ipynb ├── README.md ├── TP L3 PPC UF (à compléter).ipynb ├── TP L3 PPC extraction (à compléter).ipynb ├── TP _L3_2_Diffusion.ipynb ├── TP _L3_6_MecaFlu.ipynb ├── TP _L3_7_Thermique.ipynb ├── UNIX └── science.txt ├── rech ├── 1_fonctionnement_parametre.py ├── RECH_Fluo_bsa_online.ipynb ├── RECH_Fluo_online.ipynb ├── RECH_SAXS_traitement.ipynb ├── filtration_membranaire-v4-pb2.py ├── fit_photoconversion.ipynb ├── readme └── treatment_spectrum_UV.ipynb └── requirements.txt /L2_EX1_quantite_composition_melange_eau_ethanol.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Exercice 1 Mélange éthanol-eau\n", 8 | "On mélange 50 g de d'ethanol pur, A, avec 20 g d'eau, W.\n", 9 | "Calculer les fractions molaires, massiques et volumique.\n", 10 | "\n", 11 | "Données à 20°C :\n", 12 | "$\\rho_{eau}=1000 kg/m3$\n", 13 | "$\\rho_{eth}=789 kg/m3$\n", 14 | "$M_{eth}=46 g/mol$\n", 15 | "$M_{eau}=18 g/mol$" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 4, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "name": "stdout", 25 | "output_type": "stream", 26 | "text": [ 27 | " Ethanol Eau \n", 28 | "Fraction massique 0.714 0.286\n", 29 | "Fraction molaire 0.495 0.505\n", 30 | "Fraction volumique 0.76 0.24 (en négligeant les volumes de mélange)\n" 31 | ] 32 | } 33 | ], 34 | "source": [ 35 | "#Données W eau et A alcool\n", 36 | "rho_W=1000 #M_W/V_W kg/m3 ou g/L\n", 37 | "rho_A=789 #M_A/V_A kg/m3 ou g/L\n", 38 | "M_A=46 #g/mol\n", 39 | "M_W=18 #g/mol\n", 40 | "\n", 41 | "m_A=50 #g A\n", 42 | "m_W=20 #g W\n", 43 | "m_T=m_A+m_W\n", 44 | "\n", 45 | "#Fraction massique\n", 46 | "x_mA=m_A/m_T\n", 47 | "x_mW=m_W/m_T\n", 48 | "\n", 49 | "#Fraction molaire \n", 50 | "n_A=m_A/M_A\n", 51 | "n_W=m_W/M_W\n", 52 | "n_T=n_A+n_W\n", 53 | "x_nA=n_A/n_T\n", 54 | "x_nW=n_W/n_T\n", 55 | "\n", 56 | "#Fraction volumique \n", 57 | "V_A=m_A/rho_A #L\n", 58 | "V_W=m_W/rho_W #L\n", 59 | "V_T=V_A+V_W #L on neglige les volumes de mélanges qui seront vus plus tard\n", 60 | "x_VA=V_A/V_T\n", 61 | "x_VW=V_W/V_T\n", 62 | "\n", 63 | "print('{:<20}{:<8}{:<8}'.format('','Ethanol','Eau'))\n", 64 | "print('{:<20}{:.3g}{:<3}{:.3g}'.format('Fraction massique',x_mA,'', x_mW))\n", 65 | "print('{:<20}{:.3g}{:<3}{:.3g}'.format('Fraction molaire',x_nA,'', x_nW))\n", 66 | "print('{:<20}{:.3g}{:<4}{:.3g} (en négligeant les volumes de mélange)'.format('Fraction volumique',x_VA,'', x_VW))" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "metadata": {}, 72 | "source": [ 73 | "## Exercice 1\n", 74 | "Quels sont les masses à peser d'éthanol et d'eau pour réaliser 20g d'un mélange avec une fraction molaire de 30% en éthanol ?\n", 75 | ">Il s'agit ici de déterminer deux inconnues m_A et m_W sachant que :\n", 76 | ">- $m_{eth}+m_{eau}=20 g$\n", 77 | ">- $n_{eth}/n_T=0.3$\n", 78 | ">\n", 79 | "> Or $n_{eth}=m_{eth}/M_{eth}$ et $n_W=m_W/M_W$. Le système à résoudre est donc :\n", 80 | ">- $m_{eth}+m_{eau}=m_T=20 g$\n", 81 | ">- $\\frac{m_{eth}/M_{eth}}{m_{eth}/M_{eth}+m_{eau}/M_{eau}}=x_{eth}=0.3$\n", 82 | ">\n", 83 | ">On est arrivé à exprimer le problème avec deux équations et deux inconnus : c'est raassurant et un premier pas important franchi ! On peut ensuite combiner ces équations pour avoir une équation à une inconnue, choisissons de tout exprimer en fonction de $m_A$ :\n", 84 | ">\n", 85 | ">$m_{eth}/M_{eth}=x_{eth}(m_{eth}/M_{eth}+(m_T-m_{eth})/M_{eau})$\n", 86 | ">\n", 87 | ">$m_{eth}/M_{eth}-x_{eth}(m_{eth}/M_{eth}+(m_T-m_{eth})/M_{eau})=0$\n", 88 | ">\n", 89 | ">$m_{eth}(1/M_{eth}-x_{eth}(1/M_{eth}-1/M_{eau}))-x_{eth}m_T/M_{eau}=0$\n", 90 | ">\n", 91 | ">$m_{eth}(1/M_{eth}-x_{eth}(1/M_{eth}-1/M_{eau}))=x_{eth}m_T/M_{eau}$\n", 92 | ">\n", 93 | ">$m_{eth}=\\frac{x_{eth}m_T/M_{eau}}{1/M_{eth}-x_{eth}(1/M_{eth}-1/M_{eau})}$\n", 94 | ">\n", 95 | ">$\\frac{m_{eth}}{m_T}=w_{eth}=\\frac{1}{1+(1/x_{eth}-1)M_{eau}/M_{eth}}$\n", 96 | ">\n", 97 | ">Cette dernière écriture permet de vérifier que les unités sont correctes (c'est important pour trouver ses erreurs). \n", 98 | ">\n", 99 | ">On peut aussi partir de l'écriture de la fraction massique en supposant que l'on connait le nombre de mole total, $n_T$ qui ensuite à la bonne idée de se simplifier !\n", 100 | ">\n", 101 | ">$w_{eth}=\\frac{m_{eth}}{m_{eth}+m_{eau}}$\n", 102 | ">\n", 103 | ">$w_{eth}=\\frac{x_{eth}~n_T~M_{eth}}{x_{eth}~n_T~M_{eth}+x_{eau}~n_T~M_{eau}}$\n", 104 | ">\n", 105 | ">$w_{eth}=\\frac{x_{eth}~M_{eth}}{x_{eth}~M_{eth}+(1-x_{eth})~M_{eau}}$\n", 106 | ">\n", 107 | ">C'est un calcul assez compliqué : cela vaut le coup de recalculer la fraction molaire une fois les masses déterminés pour vérifier son calcul." 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 3, 113 | "metadata": {}, 114 | "outputs": [ 115 | { 116 | "name": "stdout", 117 | "output_type": "stream", 118 | "text": [ 119 | "Pour une fraction molaire de 0.3 il faut une fraction massique de 0.523\n", 120 | "il faut peser 10.455 g d'éthanol et 9.545 g d'eau\n", 121 | "\n", 122 | "Vérification nA= 0.227 n_W= 0.53 soit une fraction molaire de 0.3\n" 123 | ] 124 | } 125 | ], 126 | "source": [ 127 | "m_T=20\n", 128 | "x_nA=0.3\n", 129 | "x_mA=1/(1+(1/x_nA-1)*M_W/M_A)\n", 130 | "print('Pour une fraction molaire de', x_nA, \"il faut une fraction massique de\", round(x_mA,3))\n", 131 | "m_A=x_mA*m_T\n", 132 | "m_W=m_T-x_mA*m_T\n", 133 | "print('il faut peser', round(m_A,3), 'g d\\'éthanol et', round(m_W,3), 'g d\\'eau')\n", 134 | "print('')\n", 135 | "n_A=m_A/M_A\n", 136 | "n_W=m_W/M_W\n", 137 | "print('Vérification nA=',round(n_A,3),' n_W=', round(n_W,3), 'soit une fraction molaire de', round(n_A/(n_A+n_W),2))\n" 138 | ] 139 | }, 140 | { 141 | "cell_type": "markdown", 142 | "metadata": {}, 143 | "source": [ 144 | "# Quantité et composition\n", 145 | "\n", 146 | "Il est important de savoir manipuler et convertir les quantités et les compositions. Dans les procédés, il est aussi souvent nécessaire de faire des bilans sur les quantités et les débits. Cette feuille doit vous permettre de vous exercer et de développer une méthodologie vous permettant d'effecteur ces calculs sans erreurs (80 % des points perdus dans les examens sont liées à des problèmes de calculs de ce type).\n", 147 | "\n", 148 | "## Quantité\n", 149 | "\n", 150 | "On peut representer une quantité de trois façons différentes par : \n", 151 | "- le nombre de **moles**, n, lié aux nombres de molécules et donc d'objets avec le [nombre d'Avogadro](https://fr.wikipedia.org/wiki/Nombre_d%27Avogadro))\n", 152 | "- la **masse**, m\n", 153 | "- le **volume**, V\n", 154 | "\n", 155 | "En ajoutant un indice, on peut ainsi définir des quantités partielles, c'est à dire des quantités d'un constituant dans un mélange (par exemple, $n_A$ représente le nombre de mole de A). On peut également utilisé l'indice T pour la quantité totale (pour un mélange composé de A et B : $n_T=n_A+n_B$). Les quantités peuvent ainsi s'ajouter.\n", 156 | "\n", 157 | "On peut passer d'une quantité à l'autre en utilisant des rapports de quantité qui caractérise les propriétés des constituants ou des mélanges :\n", 158 | "- la **masse molaire** réprésente le rapport la masse par moles, $M_A=\\frac{m_A}{n_A}$\n", 159 | "- la **masse volumique** représente le rapport la masse par unité de volume $\\rho_A=\\frac{m_A}{V_A}$\n", 160 | "- le **volume molaire** représente le rapport le volume occupé par une mole $v_A=\\frac{V_A}{n_A}$\n", 161 | "\n", 162 | "Il faut utiliser avec précaution ces changements de quantité en vérifiant à quelles quantités elles se rapportent, quantité d'un constituant ou du mélange. On peut ainsi définir la masse volumique du constituant A $\\rho_A=\\frac{m_A}{V_A}$ mais aussi du mélange $\\rho_T=\\frac{m_T}{V_T}$. \n", 163 | "\n", 164 | "**Attention**\n", 165 | "\n", 166 | "Vous pouvez aussi remarquer que ces rapports ne s'aditionnent pas : \n", 167 | "\n", 168 | "Les masses volumiques ne s'additionnent pas : $\\rho_T \\ne \\rho_A+\\rho_B$ mais $V_T \\rho_T = V_A \\rho_A + V_B \\rho_B$ ou $\\frac{m_T}{\\rho_T} = \\frac{m_A}{\\rho_A}+\\frac{m_B}{\\rho_B}$.\n", 169 | "\n", 170 | "Les masses molaires ne s'additionnent pas. Une erreur classique est de dire que la masse molaire du mélange est la somme des masses molaires : $M_T \\ne M_A+M_B$.\n", 171 | "\n", 172 | "## Composition\n", 173 | "\n", 174 | "Les compositions représentent un rapport de quantité dans les mélanges : généralement une quantité d'un constituant sur une quantité totale. On peut utiliser :\n", 175 | "\n", 176 | "Les **concentrations** représentent généralement une quantité d'un constituant sur le volume total, $V_T$. On peut définir :\n", 177 | "- une concentration molaire $c_{nA}=n_A/V_T$\n", 178 | "- une concentration massique $c_{mA}=m_A/V_T$\n", 179 | "- une concentration volumique $c_{VA}=V_A/V_T$ qui est aussi une fraction volumique ou un degré (noté°)\n", 180 | "\n", 181 | "Les **fractions** représentent une quantité d'un constituant sur la même quantité totale. On peut ainsi définir :\n", 182 | "- une fraction molaire $x_{A}=n_A/n_T$\n", 183 | "- une fraction molaire $w_{A}=m_A/m_T$\n", 184 | "- une fraction volumique $\\phi_{A}=c_{VA}=V_A/V_T$\n", 185 | "\n", 186 | "\n", 187 | "**Pour continuer**\n", 188 | "\n", 189 | "Vous pouvez vous exercer à passer d'une fraction massique à une fraction molaire. Si vous avez une fraction massique de 0.523 en ethanol dans l'eau, quel est la fraction molaire ?!" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": null, 195 | "metadata": {}, 196 | "outputs": [], 197 | "source": [] 198 | } 199 | ], 200 | "metadata": { 201 | "kernelspec": { 202 | "display_name": "Python 3 (ipykernel)", 203 | "language": "python", 204 | "name": "python3" 205 | }, 206 | "language_info": { 207 | "codemirror_mode": { 208 | "name": "ipython", 209 | "version": 3 210 | }, 211 | "file_extension": ".py", 212 | "mimetype": "text/x-python", 213 | "name": "python", 214 | "nbconvert_exporter": "python", 215 | "pygments_lexer": "ipython3", 216 | "version": "3.9.12" 217 | } 218 | }, 219 | "nbformat": 4, 220 | "nbformat_minor": 4 221 | } 222 | -------------------------------------------------------------------------------- /L2_EX2_debits_d_air.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "attachments": {}, 5 | "cell_type": "markdown", 6 | "id": "5cc67ce1", 7 | "metadata": {}, 8 | "source": [ 9 | "# débits d'air\n", 10 | "\n", 11 | "On considère de l’air\n", 12 | "\n", 13 | "1- Sachant que le débit molaire en dioxygène est de 1 mol/s, quels sont les débits molaires d’air et de diazote?\n", 14 | "\n", 15 | "> 1. $F_{O2}=1$ mol/s\n", 16 | "> $$ F_{O2}=x_{O2} F$$\n", 17 | "> soit $$ F=\\frac{F_{O2}}{x_{O2}}$$\n", 18 | "> $$ F_{N2}=x_{N2} F$$\n", 19 | "> on peut vérifier que $F_{O2}+F_{N2}=F$" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": 21, 25 | "id": "f9882500", 26 | "metadata": {}, 27 | "outputs": [ 28 | { 29 | "name": "stdout", 30 | "output_type": "stream", 31 | "text": [ 32 | "Le débit molaire (global) d air est de 4.761904761904762 mol/s\n", 33 | "Le débit molaire (partiel) de diazote est de 3.761904761904762 mol/s\n" 34 | ] 35 | } 36 | ], 37 | "source": [ 38 | "M_O2=32 #g/mol\n", 39 | "M_N2=28 #g/mol\n", 40 | "x_O2=0.21 #molO2/molT\n", 41 | "x_N2=0.79 #molN2/molT\n", 42 | "F_O2=1 #mol/s\n", 43 | "\n", 44 | "#Débits molaires\n", 45 | "F=F_O2/x_O2\n", 46 | "F_N2=x_N2*F\n", 47 | "\n", 48 | "print('Le débit molaire (global) d air est de {} mol/s'.format(F))\n", 49 | "print('Le débit molaire (partiel) de diazote est de {} mol/s'.format(F_N2))" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "id": "b2a8b3ca", 55 | "metadata": {}, 56 | "source": [ 57 | "2- En considérant un débit d’air de 10 mol/h, quels sont les débits molaires (mol/h) et massiques (g/h) en dioxygène et diazote? \n", 58 | "\n", 59 | "> 2- $F=10$ mol/h\n", 60 | "> $$ F_{O2}=x_{O2} F$$\n", 61 | "> $$ F_{N2}=x_{N2} F$$\n", 62 | "> $$ Fw_{O2}=M_{O2} F_{O2}$$\n", 63 | "> $$ Fw_{N2}=M_{N2} F_{N2}$$\n", 64 | ">" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": 22, 70 | "id": "024c75a4", 71 | "metadata": {}, 72 | "outputs": [ 73 | { 74 | "name": "stdout", 75 | "output_type": "stream", 76 | "text": [ 77 | "Le débit molaire (partiel) de diazote est de 7.9 mol/h\n", 78 | "Le débit molaire (partiel) de dioxygène est de 2.1 mol/h\n", 79 | "\n", 80 | "Le débit massique (partiel) de diazote est de 221.20000000000002 g/h\n", 81 | "Le débit massique (partiel) de dioxygène est de 67.2 g/h\n" 82 | ] 83 | } 84 | ], 85 | "source": [ 86 | "F= 10 #mol/h\n", 87 | "F_N2=x_N2*F\n", 88 | "F_O2=x_O2*F\n", 89 | "\n", 90 | "print('Le débit molaire (partiel) de diazote est de {} mol/h'.format(F_N2))\n", 91 | "print('Le débit molaire (partiel) de dioxygène est de {} mol/h'.format(F_O2))\n", 92 | "print('')\n", 93 | "print('Le débit massique (partiel) de diazote est de {} g/h'.format(F_N2*M_N2))\n", 94 | "print('Le débit massique (partiel) de dioxygène est de {} g/h'.format(F_O2*M_O2))" 95 | ] 96 | }, 97 | { 98 | "cell_type": "markdown", 99 | "id": "321191af", 100 | "metadata": {}, 101 | "source": [ 102 | "3- Calculer le débit massique global de l’air (g/h).\n", 103 | "\n", 104 | "> 3- $$Fw=Fw_{O2}+Fw_{N2}$$" 105 | ] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "execution_count": 23, 110 | "id": "7b503632", 111 | "metadata": {}, 112 | "outputs": [ 113 | { 114 | "name": "stdout", 115 | "output_type": "stream", 116 | "text": [ 117 | "Le débit massique (global) de l air est de 288.40 g/h\n" 118 | ] 119 | } 120 | ], 121 | "source": [ 122 | "Fw=F_O2*M_O2+F_N2*M_N2\n", 123 | "print('Le débit massique (global) de l air est de {:.2f} g/h'.format(Fw))" 124 | ] 125 | }, 126 | { 127 | "cell_type": "markdown", 128 | "id": "afbaaa85", 129 | "metadata": {}, 130 | "source": [ 131 | "**Pour aller plus loin :** Calcul des fractions massiques à partir des fractions molaires\n", 132 | "\n", 133 | "> $w_{O2}=\\frac{m_{O2}}{m_{O2}+m_{N2}}$\n", 134 | ">\n", 135 | "> Considérons un nombre de mole total, $n_T$. Il y a aura donc $x_{O2}~n_T$ moles de dioxygène et $x_{N2}~n_T$ moles de diazote et donc $M_{O2}~x_{O2}~n_T$ g de dioxygène et $M_{N2}~x_{N2}~n_T$ g de dioxygène \n", 136 | ">\n", 137 | "> La fraction massique s'écrit donc :\n", 138 | ">$w_{O2}=\\frac{M_{O2}~x_{O2}~n_T}{M_{O2}~x_{O2}~n_T+M_{N2}~x_{N2}~n_T}=\\frac{M_{O2}~x_{O2}}{M_{O2}~x_{O2}+M_{N2}~x_{N2}}$" 139 | ] 140 | }, 141 | { 142 | "cell_type": "code", 143 | "execution_count": 24, 144 | "id": "0b3c214d", 145 | "metadata": {}, 146 | "outputs": [ 147 | { 148 | "name": "stdout", 149 | "output_type": "stream", 150 | "text": [ 151 | "La fraction massique en dioxygène est de 23.30 %\n", 152 | "La fraction massique en dioxygène est de 76.70 %\n" 153 | ] 154 | } 155 | ], 156 | "source": [ 157 | "w_O2=M_O2*x_O2/(M_O2*x_O2+M_N2*x_N2)\n", 158 | "print ('La fraction massique en dioxygène est de {:.2f} %'.format(w_O2*100))\n", 159 | "w_N2=M_N2*x_N2/(M_O2*x_O2+M_N2*x_N2)\n", 160 | "print ('La fraction massique en dioxygène est de {:.2f} %'.format(w_N2*100))" 161 | ] 162 | } 163 | ], 164 | "metadata": { 165 | "kernelspec": { 166 | "display_name": "Python 3 (ipykernel)", 167 | "language": "python", 168 | "name": "python3" 169 | }, 170 | "language_info": { 171 | "codemirror_mode": { 172 | "name": "ipython", 173 | "version": 3 174 | }, 175 | "file_extension": ".py", 176 | "mimetype": "text/x-python", 177 | "name": "python", 178 | "nbconvert_exporter": "python", 179 | "pygments_lexer": "ipython3", 180 | "version": "3.9.12" 181 | } 182 | }, 183 | "nbformat": 4, 184 | "nbformat_minor": 5 185 | } 186 | -------------------------------------------------------------------------------- /L2_eau_douce_par_evaporation.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "28360275", 6 | "metadata": {}, 7 | "source": [ 8 | "## Production d’eau douce par évaporation sur la planète\n", 9 | "\n", 10 | "En considérant qu’environ un quart de l’énergie solaire contribue à l’évaporation de l’eau :\n", 11 | "1. Calculer la masse d’eau évaporée par an (vérifier l’ordre de grandeur avec les données des transparents du cours)\n", 12 | "2. Calculer la puissance reçue en énergie solaire en W par m2\n", 13 | "3. Calculer la masse d’eau évaporée en g par h et par m2\n", 14 | "4. En déduire le temps de séjour de l’eau douce dans l’atmosphère. Expliquer ce que cela représente. \n", 15 | "\n", 16 | "**Données :**\t\n", 17 | "Puissance de l’énergie solaire reçue par la terre : P=1,74 $10^{17}$ W, Rayon de la terre : R=6370 km, Masse d’eau sous forme de vapeur d’eau dans l’atmosphère : $M_{eau}=13~10^{15}$ kg, Chaleur latente d’évaporation : $\\Delta H_{vap}=2.5~MJ/kg$ \n", 18 | "\n", 19 | "> 1. La masse d'eau évaporée par s (kg/s) -qu'on peut aussi appeler flux ou débit- peut se calculer en divisant la puissance de l'énergie solaire recue par la terre et contribuant à l'évaporation en (J/s) par l'énergie nécessaire pour évaporer un kg d'eau (J/kg)\n", 20 | "$$Q=\\frac{0,25 P}{\\Delta H_{vap}}$$\n" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 17, 26 | "id": "0c0fc290", 27 | "metadata": {}, 28 | "outputs": [ 29 | { 30 | "name": "stdout", 31 | "output_type": "stream", 32 | "text": [ 33 | "Le débit d eau évaporée est 1.74e+10 kg/s soit 5.49e+17 kg/an soit 5.49e+05 km3/an\n" 34 | ] 35 | } 36 | ], 37 | "source": [ 38 | "#Données\n", 39 | "P=1.74e17 #W ou J/s\n", 40 | "R=6370 #km\n", 41 | "M_vap_eau=13e15 #kg\n", 42 | "DH_eau=2.5e6 #J/kg\n", 43 | "pourc=0.25\n", 44 | "rho_eau=1000 #kg m-3\n", 45 | "\n", 46 | "#Changements d'unités\n", 47 | "sec_par_an=365*24*60*60\n", 48 | "m3_par_km3=1000**3\n", 49 | "\n", 50 | "#Puissance utilisée pour l'évaporation\n", 51 | "P_evap=P*pourc #J/s\n", 52 | "#Quantité évaporée\n", 53 | "Q_evap=P_evap/DH_eau #kg/s\n", 54 | "Q_evap1=Q_evap*sec_par_an #kg/an\n", 55 | "Q_evap2=Q_evap*sec_par_an/rho_eau/m3_par_km3 #km3/an\n", 56 | "print ('Le débit d eau évaporée est {:.2e} kg/s soit {:.2e} kg/an soit {:.2e} km3/an'.format(Q_evap,Q_evap1,Q_evap2))\n" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "id": "113e1224", 62 | "metadata": {}, 63 | "source": [ 64 | ">2. En moyenne, la puissance de l'énergie solaire reçue sur la terre par m2 est la puissance totale reçue (en J/s) divisée par la surface de la terre :\n", 65 | "$$P_{par m2}=\\frac{P}{4 \\pi R^2}$$\n", 66 | ">à noter qu'il faut utiliser la surface de toute la terre (et pas seulement la partie éclairée) puisqu'on effectue une moyenne de la puissance dans l'espace (la quantité n'est pas la même aux poles qu'à l'équateur) et dans le temps (la quantité n'est pas la même la nuit que le jour !). " 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 18, 72 | "id": "4afc748b", 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "name": "stdout", 77 | "output_type": "stream", 78 | "text": [ 79 | "La puissance solaire reçue est 341.24 W/m2\n" 80 | ] 81 | } 82 | ], 83 | "source": [ 84 | "import numpy as np\n", 85 | "P_parm2=P/(4*np.pi*R*R*1000*1000)\n", 86 | "print ('La puissance solaire reçue est {:.2f} W/m2'.format(P_parm2))" 87 | ] 88 | }, 89 | { 90 | "cell_type": "markdown", 91 | "id": "21079245", 92 | "metadata": {}, 93 | "source": [ 94 | ">3. La masse d’eau évaporée en kg.s-1.m-2 qu'on peut aussi appeler densité de flux est :\n", 95 | "$$j=\\frac{0,25 P_{par m2}}{\\Delta H_{vap}}$$" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 19, 101 | "id": "16c7a318", 102 | "metadata": {}, 103 | "outputs": [ 104 | { 105 | "name": "stdout", 106 | "output_type": "stream", 107 | "text": [ 108 | "La densité de flux d eau évaporée est 3.41e-05 kg s-1 m-2 soit 122.85 g h-1 m-2\n" 109 | ] 110 | } 111 | ], 112 | "source": [ 113 | "j_evap=pourc*P_parm2/DH_eau #kg/s m2\n", 114 | "j_evap1=j_evap*1000*3600\n", 115 | "print ('La densité de flux d eau évaporée est {:.2e} kg s-1 m-2 soit {:.2f} g h-1 m-2'.format(j_evap,j_evap1))" 116 | ] 117 | }, 118 | { 119 | "cell_type": "markdown", 120 | "id": "728ba50e", 121 | "metadata": {}, 122 | "source": [ 123 | ">4. Le temps de séjour est défini comme le rapport du volume du système sur le débit qui parourt le système :\n", 124 | " $$t_s=\\frac{V}{Q_{vol}}$$\n", 125 | "> On pourra considérer (en faisant l'hypothèse d'une masse volumique de la vapeur d'eau constante -elle peut varier selon la pression et donc l'altitude-) que le rapport du volume sur le débit volumique est égal au rapport de la masse sur le débit massique. " 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": 20, 131 | "id": "a9bbf6af", 132 | "metadata": {}, 133 | "outputs": [ 134 | { 135 | "name": "stdout", 136 | "output_type": "stream", 137 | "text": [ 138 | "Le temps de sejour est 7.47e+05 secondes soit 8.65 jours\n" 139 | ] 140 | } 141 | ], 142 | "source": [ 143 | "t_s=M_vap_eau/Q_evap #s\n", 144 | "t_s1=t_s/3600/24 #jours\n", 145 | "\n", 146 | "print ('Le temps de sejour est {:.2e} secondes soit {:.2f} jours'.format(t_s,t_s1))\n", 147 | "\n" 148 | ] 149 | }, 150 | { 151 | "attachments": {}, 152 | "cell_type": "markdown", 153 | "id": "28e9b467", 154 | "metadata": {}, 155 | "source": [ 156 | "> Ce temps correspond au temps de \"vie\" moyen d'une goutte de vapeur d eau entre le moment où elle s'évapore et le moment où elle retombe sous forme de précipitation. C'est un temps de vie moyen : certaines gouttes n’auront pas cette chance de voyager dans l’atmosphère autant de temps et se recondenseront juste après s’être évaporée (comme dans les bouteilles d’eau que vous avez devant vous !). D’autres voyageront beaucoup longtemps surtout si elles se font ingurgiter par un goeland ! Cette valeur est donc une moyenne et vous verrrez en master comment on peut avoir une description plus précise de la distribution des temps de séjours.\n" 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": null, 162 | "id": "1659c083", 163 | "metadata": {}, 164 | "outputs": [], 165 | "source": [] 166 | } 167 | ], 168 | "metadata": { 169 | "kernelspec": { 170 | "display_name": "Python 3 (ipykernel)", 171 | "language": "python", 172 | "name": "python3" 173 | }, 174 | "language_info": { 175 | "codemirror_mode": { 176 | "name": "ipython", 177 | "version": 3 178 | }, 179 | "file_extension": ".py", 180 | "mimetype": "text/x-python", 181 | "name": "python", 182 | "nbconvert_exporter": "python", 183 | "pygments_lexer": "ipython3", 184 | "version": "3.9.12" 185 | } 186 | }, 187 | "nbformat": 4, 188 | "nbformat_minor": 5 189 | } 190 | -------------------------------------------------------------------------------- /L2_quantite_composition.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Quantité, composition, débits partiel et globaux\n", 8 | "\n", 9 | "Il est important de savoir manipuler et convertir les quantités et les compositions. Dans les procédés, il est aussi souvent nécessaire de faire des bilans sur les quantités et les débits. Cette feuille doit vous permettre de vous exercer et de développer une méthodologie vous permettant d'effecteur ces calculs sans erreurs (80 % des points perdus dans les examens sont liées à des problèmes de calculs de ce type).\n", 10 | "\n", 11 | "## Quantité\n", 12 | "\n", 13 | "On peut representer une quantité de trois façons différentes par : \n", 14 | "- le nombre de **moles**, n, lié aux nombres de molécules et donc d'objets avec le [nombre d'Avogadro](https://fr.wikipedia.org/wiki/Nombre_d%27Avogadro))\n", 15 | "- la **masse**, m\n", 16 | "- le **volume**, V\n", 17 | "\n", 18 | "En ajoutant un indice, on peut ainsi définir des quantités partielles, c'est à dire des quantités d'un constituant dans un mélange (par exemple, $n_A$ représente le nombre de mole de A). On peut également utilisé l'indice T pour la quantité totale (pour un mélange composé de A et B : $n_T=n_A+n_B). Les quantités peuvent ainsi s'ajouter.\n", 19 | "\n", 20 | "On peut passer d'une quantité à l'autre en utilisant des rapports de quantité qui caractérise les propriétés des constituants ou des mélanges :\n", 21 | "- la **masse molaire** réprésente le rapport la masse par moles, $M_A=\\frac{m_A}{n_A}$\n", 22 | "- la **masse volumique** représente le rapport la masse par unité de volume $\\rho_A=\\frac{m_A}{V_A}$\n", 23 | "- le **volume molaire** représente le rapport le volume occupé par une mole $v_A=\\frac{V_A}{n_A}$\n", 24 | "\n", 25 | "Il faut utiliser avec précaution ces changements de quantité en vérifiant à quelles quantités elles se rapportent, quantité d'un constituant ou du mélange. On peut ainsi définir la masse volumique du constituant A $\\rho_A=\\frac{m_A}{V_A}$ mais aussi du mélange $\\rho_T=\\frac{m_T}{V_T}$. Vous pouvez aussi remarquer que ces rapports ne s'aditionnent pas : $\\rho_T \\ne \\rho_A+\\rho_B$ mais $V_T\\rho_T = V_A\\rho_A+V_B\\rho_B$.\n", 26 | "\n", 27 | "## Composition\n", 28 | "\n", 29 | "Les compositions représentent un rapport de quantité dans les mélanges : généralement une quantité d'un constituant sur une quantité totale. On peut utiliser :\n", 30 | "\n", 31 | "Les **concentrations** représentent généralement une quantité d'un constituant sur le volume total, $V_T$. On peut définir :\n", 32 | "- une concentration molaire $c_{nA}=n_A/V_T$\n", 33 | "- une concentration massique $c_{mA}=m_A/V_T$\n", 34 | "- une concentration volumique $c_{VA}=V_A/V_T$ qui est aussi une fraction volumique ou un degré (noté°)\n", 35 | "\n", 36 | "Les **fractions** représentent une quantité d'un constituant sur la même quantité totale. On peut ainsi définir :\n", 37 | "- une fraction molaire $x_{nA}=n_A/n_T$\n", 38 | "- une fraction molaire $x_{mA}=m_A/m_T$\n", 39 | "- une fraction volumique $x_{VA}=c_{VA}=V_A/V_T$\n", 40 | "\n", 41 | "## Exerçons-nous\n", 42 | "On mélange 50 g de d'ethanol pur avec 20 g d'eau.\n", 43 | "Calculer les fractions molaires, massiques et volumique.\n", 44 | "\n", 45 | "Données à 20°C :\n", 46 | "$\\rho_W=1000 kg/m3$\n", 47 | "$\\rho_A=789 kg/m3$\n", 48 | "$M_A=46 g/mol$\n", 49 | "$M_W=18 g/mol$" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 29, 55 | "metadata": {}, 56 | "outputs": [ 57 | { 58 | "name": "stdout", 59 | "output_type": "stream", 60 | "text": [ 61 | " Ethanol Eau \n", 62 | "Fraction massique 0.714 0.286\n", 63 | "Fraction molaire 0.495 0.505\n", 64 | "Fraction volumique 0.76 0.24\n" 65 | ] 66 | } 67 | ], 68 | "source": [ 69 | "#Données W eau et A alcool\n", 70 | "rho_W=1000 #M_W/V_W kg/m3 ou g/L\n", 71 | "rho_A=789 #M_A/V_A kg/m3 ou g/L\n", 72 | "M_A=46 #g/mol\n", 73 | "M_W=18 #g/mol\n", 74 | "\n", 75 | "m_A=50 #g A\n", 76 | "m_W=20 #g W\n", 77 | "m_T=m_A+m_W\n", 78 | "\n", 79 | "#Fraction massique\n", 80 | "x_mA=m_A/m_T\n", 81 | "x_mW=m_W/m_T\n", 82 | "\n", 83 | "#Fraction molaire \n", 84 | "n_A=m_A/M_A\n", 85 | "n_W=m_W/M_W\n", 86 | "n_T=n_A+n_W\n", 87 | "x_nA=n_A/n_T\n", 88 | "x_nW=n_W/n_T\n", 89 | "\n", 90 | "#Fraction volumique \n", 91 | "V_A=m_A/rho_A #L\n", 92 | "V_W=m_W/rho_W #L\n", 93 | "V_T=V_A+V_W #L\n", 94 | "x_VA=V_A/V_T\n", 95 | "x_VW=V_W/V_T\n", 96 | "\n", 97 | "print('{:<20}{:<8}{:<8}'.format('','Ethanol','Eau'))\n", 98 | "print('{:<20}{:.3g}{:<3}{:.3g}'.format('Fraction massique',x_mA,'', x_mW))\n", 99 | "print('{:<20}{:.3g}{:<3}{:.3g}'.format('Fraction molaire',x_nA,'', x_nW))\n", 100 | "print('{:<20}{:.3g}{:<4}{:.3g}'.format('Fraction volumique',x_VA,'', x_VW))" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "## Exerçons-nous\n", 108 | "Quels sont les masses à peser d'éthanol et d'eau pour réaliser 20g d'un mélange avec une fraction molaire de 30% en éthanol ?\n", 109 | ">Il s'agit ici de déterminer deux inconnues m_A et m_W sachant que :\n", 110 | "- $m_A+m_W=20 g$\n", 111 | "- $n_A/n_T=0.3$\n", 112 | ">\n", 113 | "> Or $n_A=m_A/M_A$ et $n_W=m_W/M_W$. Le système à résoudre est donc :\n", 114 | "- $m_A+m_W=m_T=20 g$\n", 115 | "- $\\frac{m_A/M_A}{m_A/M_A+m_W/M_W}=x_{nA}=0.3$\n", 116 | ">\n", 117 | ">On est arrivé à exprimer le problème avec deux équations et deux inconnus : c'est raassurant et un premier pas important franchi ! On peut ensuite combiner ces équations pour avoir une équation à une inconnue, choisissons de tout exprimer en fonction de $m_A$ :\n", 118 | ">\n", 119 | ">$m_A/M_A=x_{nA}(m_A/M_A+(m_T-m_A)/M_W)$\n", 120 | ">\n", 121 | ">$m_A/M_A-x_{nA}(m_A/M_A+(m_T-m_A)/M_W)=0$\n", 122 | ">\n", 123 | ">$m_A(1/MA-x_{nA}(1/M_A-1/M_W))-x_{nA}m_T/M_W=0$\n", 124 | ">\n", 125 | ">$m_A(1/MA-x_{nA}(1/M_A-1/M_W))=x_{nA}m_T/M_W$\n", 126 | ">\n", 127 | ">$m_A=\\frac{x_{nA}m_T/M_W}{1/MA-x_{nA}(1/M_A-1/M_W)}$\n", 128 | ">\n", 129 | ">$\\frac{m_A}{m_T}=x_{mA}=\\frac{1}{1+(1/x_{nA}-1)M_W/M_A}$\n", 130 | ">\n", 131 | ">Cette dernière écriture permet de vérifier que les unités sont correctes (c'est important pour trouver ses erreurs). C'est un calcul assez compliqué : cela vaut le coup de recalculer la fraction molaire une fois les masses déterminés pour vérifier son calcul." 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": 30, 137 | "metadata": {}, 138 | "outputs": [ 139 | { 140 | "name": "stdout", 141 | "output_type": "stream", 142 | "text": [ 143 | "Pour une fraction molaire de 0.3 il faut une fraction massique de 0.523\n", 144 | "il faut peser 10.455 g d'éthanol et 9.545 g d'eau\n", 145 | "\n", 146 | "Vérification nA= 0.227 n_W= 0.53 soit une fraction molaire de 0.3\n" 147 | ] 148 | } 149 | ], 150 | "source": [ 151 | "m_T=20\n", 152 | "x_nA=0.3\n", 153 | "x_mA=1/(1+(1/x_nA-1)*M_W/M_A)\n", 154 | "print('Pour une fraction molaire de', x_nA, \"il faut une fraction massique de\", round(x_mA,3))\n", 155 | "m_A=x_mA*m_T\n", 156 | "m_W=m_T-x_mA*m_T\n", 157 | "print('il faut peser', round(m_A,3), 'g d\\'éthanol et', round(m_W,3), 'g d\\'eau')\n", 158 | "print('')\n", 159 | "n_A=m_A/M_A\n", 160 | "n_W=m_W/M_W\n", 161 | "print('Vérification nA=',round(n_A,3),' n_W=', round(n_W,3), 'soit une fraction molaire de', round(n_A/(n_A+n_W),2))\n" 162 | ] 163 | } 164 | ], 165 | "metadata": { 166 | "kernelspec": { 167 | "display_name": "Python 3 (ipykernel)", 168 | "language": "python", 169 | "name": "python3" 170 | }, 171 | "language_info": { 172 | "codemirror_mode": { 173 | "name": "ipython", 174 | "version": 3 175 | }, 176 | "file_extension": ".py", 177 | "mimetype": "text/x-python", 178 | "name": "python", 179 | "nbconvert_exporter": "python", 180 | "pygments_lexer": "ipython3", 181 | "version": "3.9.12" 182 | } 183 | }, 184 | "nbformat": 4, 185 | "nbformat_minor": 4 186 | } 187 | -------------------------------------------------------------------------------- /L2_voiture_electrique_puissance_et_energie.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "c4b424c4", 6 | "metadata": {}, 7 | "source": [ 8 | "# Consommation d'un véhicule électrique ou d'un cycliste\n", 9 | "\n", 10 | "Cet exercice doit vous faire travailler sur les liens entre force, énergie et puissance.\n", 11 | "\n", 12 | "Une voiture électrique (Fiat 500e) de 1290 kg conduite par un humain de 80 kg possède une batterie de 37.3 kWh. La puissance du moteur est de 88 kW.\n", 13 | "\n", 14 | "On souhaite monter le col du tourmalet montée (18.3 kilomètres de long, pour un dénivelé positif de 1402 mètres). Dans cette partie, on considèrera seulement la force de pesanteur. \n", 15 | "\n", 16 | "1- Calculer la force nécessaire pour faire monter le véhicule\n", 17 | "\n", 18 | "> La force nécessaire pour faire s'élever la voiture et le conducteur est celle permettant de compenser la force de pesanteur $F=mg$ soit 1,88 10+7 N.\n", 19 | "\n", 20 | "2- Calculer l'énergie nécessaire pour monter en haut du col avec le véhicule\n", 21 | "\n", 22 | "> L'énergie correspond à la force fois la distance pendant laquelle il faut appliquer la force c'est à dire le dénivelé : $E=FH$ soit soit 1,88 10+7 J ou Ws (si la personne pousse le véhicule sur toute la montée il lui faudra environ 1 kg de barres chocolatées à 2000 kJ/100 g pour compenser cet effort !). \n", 23 | "\n", 24 | "3- En déduire le pourcentage de batterie consommée\n", 25 | "\n", 26 | "> Cette énergie correspond à 5.23 kWh soit 14 % de la capacité de la batterie.\n", 27 | "\n", 28 | "4- On souhaite monter le col en 15 min : estimer la puissance nécessaire. Est-ce que la puissance du moteur est suffisante ?\n", 29 | "\n", 30 | "> La puissance nécessaire correspond à l'énergie à dispenser par unité de temps. La puissance nécessaire est de 20,9 kW. La puissance du moteur est largement suffisante.\n", 31 | "\n", 32 | "Il faudrait rajouter à l'énergie potentielle la consommation inhérente aux frottements (avec l'air et le sol) et la consommation interne du véhicule qui est de 14 kWh/100 km.\n", 33 | "\n", 34 | "5- Comparer cette consommation à celle liée à l'énergie potentielle\n", 35 | "\n", 36 | "> La consommation liée aux kilomètres parcourus est de 2,56 kWh qu'il faudrait rajouter aux 5,23 kWh lié au dénivelé. On voit ainsi que l'énergie nécessaire à l'élévation représente 2/3 de l'énergie totale.\n", 37 | "\n", 38 | "\n", 39 | "6- Refaire des calculs similaires pour un vélo Lapierre e_explorer de 16kg avec une batterie de 500 Wh et un moteur de 250 W (puissance maximum autorisée pour un VAE par la législation Européenne).\n", 40 | "\n", 41 | "> L'énergie nécessaire pour la montée en vélo est de 1,32 10+6 J soit 367 Wh ce qui correspond à la consommation de 73 % de la batterie (attention petit risque de finir la montée à pied mais l'énergie potentielle vous aidera pour la descente). Si la personne utilise le vélo sans batterie sur toute la montée il lui faudra environ 66 g de barres chocolatées à 2000 kJ/100 g pour compenser l'effort par l'oxydation du glucose ! On consomme sur la montée 14 fois moins en vélo qu'en voiture (c'est le rapport de masse tout simplement : on comprend pourquoi il faut privilégier les véhicules électriques de faibles poids). Le temps minimum pour monter le col avec un moteur de 250 W à pleine puissance sur toute la montée est d'environ 1h30. Le record pour la montée est de 40 minutes : vous pouvez maintenant calculer la puissance développée par ce grimpeur. \n" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 8, 47 | "id": "a25743a8", 48 | "metadata": {}, 49 | "outputs": [ 50 | { 51 | "name": "stdout", 52 | "output_type": "stream", 53 | "text": [ 54 | "Force necesaire 13439.7 N\n", 55 | "Energie necesaire 18842459.400000002 J ou Ws\n", 56 | "Energie necesaire 5.234016500000001 kWh\n", 57 | "Pourcentage de batterie consommée 14.032215817694375 %\n", 58 | "Puissance necessaire 20.936066000000004\n", 59 | "Consommation liée aux km 2.5620000000000003 kWh\n" 60 | ] 61 | } 62 | ], 63 | "source": [ 64 | "M=1290+80 #kg\n", 65 | "g=9.81 #m/s2\n", 66 | "H=1402 #m\n", 67 | "B=37.3 #kWh\n", 68 | "\n", 69 | "#1 Force nécessaire\n", 70 | "F=M*g #kg.m.s-2=N\n", 71 | "print('Force necessaire', F, 'N')\n", 72 | "#2 Energie\n", 73 | "E=F*H #kg.m2.s-2=J\n", 74 | "print('Energie necessaire', E, 'J ou Ws')\n", 75 | "E_kWh=E*1e-3/3600\n", 76 | "print('Energie necessaire', E_kWh, 'kWh')\n", 77 | "print('Pourcentage de batterie consommée', 100*E_kWh/B, '%' )\n", 78 | "t=0.25 #h\n", 79 | "print('Puissance necessaire', E_kWh/0.25)\n", 80 | "\n", 81 | "conso=14 #kWh/100 km\n", 82 | "dist=18.3 #km\n", 83 | "\n", 84 | "consol_col=conso/100*dist\n", 85 | "print('Consommation liée aux km', consol_col, 'kWh')" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": null, 91 | "id": "b5375862", 92 | "metadata": {}, 93 | "outputs": [], 94 | "source": [] 95 | } 96 | ], 97 | "metadata": { 98 | "kernelspec": { 99 | "display_name": "Python 3 (ipykernel)", 100 | "language": "python", 101 | "name": "python3" 102 | }, 103 | "language_info": { 104 | "codemirror_mode": { 105 | "name": "ipython", 106 | "version": 3 107 | }, 108 | "file_extension": ".py", 109 | "mimetype": "text/x-python", 110 | "name": "python", 111 | "nbconvert_exporter": "python", 112 | "pygments_lexer": "ipython3", 113 | "version": "3.9.12" 114 | } 115 | }, 116 | "nbformat": 4, 117 | "nbformat_minor": 5 118 | } 119 | -------------------------------------------------------------------------------- /L3 Chute bille.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Vitesse de sédimentation : \n", 8 | "## Résolution en transitoire et en l'absence de diffusion\n", 9 | "\n", 10 | "Pour déterminer la vitesse de chute d'une particule de rayon, R, dans un fluide de viscosité $\\mu$, il faut faire un bilan de force sur la particule :\n", 11 | "$$\\sum \\vec{F}= m \\vec{a}$$\n", 12 | "En considérant la force de gravité, la poussée d'Archimède et la force de traînée (donnée par la lode Stokes pour un écoulement laminaire qui doit vérifier $Re=\\frac{\\rho_f u 2 R}{\\mu} < 1$), le bilan de force s'écrit alors :\n", 13 | "$$V_p(\\rho_p-\\rho_f)g-6\\pi\\mu R u=V_p\\rho_p\\frac{du}{dt}$$\n", 14 | "où $\\rho_p$ et $\\rho_f$ représentent la masse volumique de la particule et du fluide respectivement et $V_p$ le volume de la particule..\n", 15 | "\n", 16 | "Il faut donc résoudre l'équation différentielle suivante :\n", 17 | "$$V_p\\rho_p\\frac{du}{dt}+6\\pi\\mu R u=V_p(\\rho_p-\\rho_f)g$$\n", 18 | "Une solution particulière à cette équation différentielle est la vitesse limite obtenue quand l'accélération est nulle et donc $\\frac{du}{dt}=0$. La vitesse limite est égale à :\n", 19 | "$$ u_{lim}=\\frac{2 R^2}{9 \\mu}(\\rho_p-\\rho_f)g$$\n", 20 | "Pour simplifier l'équation, on peut introduire des variables sans dimensions :\n", 21 | "$$u^*=\\frac{u}{u_{lim}}$$\n", 22 | "$$t^*=\\frac{6\\pi\\mu R}{V_p\\rho_p}t=\\frac{9 \\mu}{\\rho_p 2 R^2}t $$\n", 23 | "L'équation différentielle s'écrit alors :\n", 24 | "$$\\frac{du^*}{dt^*}+u^*=1$$\n", 25 | "\n", 26 | ">Essayez par vous-même d'adimensionnaliser l'équation et vérifiez les dimensions de $t^*$ par exemple \n", 27 | "\n", 28 | "La solution générale à l'équation différente $\\frac{du^*}{u^*}=-dt^*$ est :\n", 29 | "$$u^*=Ke^{-t^*}$$\n", 30 | "La solution particulière à cette équation est :\n", 31 | "$$u^*=1$$\n", 32 | "La solution à l'équation est donc :\n", 33 | "$$u^*=Ke^{-t^*}+1$$\n", 34 | "En appliquant la conditions initiale, $u^*=0$ quand $t^*=0$, on peut déterminer la valeur de la constante, $k$, et obtenir la relation pour la vitesse en fonction du temps :\n", 35 | "$$u^*=1-e^{-t^*}$$\n", 36 | "On peut définir le temps au bout duquel la vitesse a atteint 99% de sa valeur finale, $u^*=0.99$ :\n", 37 | "$$t^*=-ln(0.01)$$\n" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 2, 43 | "metadata": {}, 44 | "outputs": [ 45 | { 46 | "name": "stdout", 47 | "output_type": "stream", 48 | "text": [ 49 | "le nombre de Reynolds est de : 0.043600000000000014\n", 50 | "la vitesse limite sera de : 0.0021800000000000005 m/s\n" 51 | ] 52 | } 53 | ], 54 | "source": [ 55 | "import numpy as np\n", 56 | "import matplotlib.pyplot as plt\n", 57 | "\n", 58 | "a=1e-4 #m\n", 59 | "rhop=2000 #kg m-3\n", 60 | "rhof=1000 #kg m-3\n", 61 | "g=9.81 #m s-2\n", 62 | "mu=0.01 #Pa s\n", 63 | "\n", 64 | "\n", 65 | "\n", 66 | "vp=4*np.pi*(a**3)/3\n", 67 | "\n", 68 | "ulim=2*(a**2)*(rhop-rhof)*g/(9*mu)\n", 69 | "\n", 70 | "Re=rhof*ulim*2*a/mu\n", 71 | "if Re>1 :\n", 72 | " print ('Attention, le résultat est FAUX car la loi de Stokes ne s\\'appplique pas')\n", 73 | "print ('le nombre de Reynolds est de :',Re)\n", 74 | "\n", 75 | "print ('la vitesse limite sera de :', ulim, 'm/s')\n", 76 | "\n" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": 9, 82 | "metadata": {}, 83 | "outputs": [ 84 | { 85 | "data": { 86 | "image/png": "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\n", 87 | "text/plain": [ 88 | "
" 89 | ] 90 | }, 91 | "metadata": { 92 | "needs_background": "light" 93 | }, 94 | "output_type": "display_data" 95 | }, 96 | { 97 | "name": "stdout", 98 | "output_type": "stream", 99 | "text": [ 100 | " On aura atteint 99.9 % de la valeur limite pour un temps de 0.0030701134573253943 s\n" 101 | ] 102 | }, 103 | { 104 | "data": { 105 | "image/png": "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\n", 106 | "text/plain": [ 107 | "
" 108 | ] 109 | }, 110 | "metadata": { 111 | "needs_background": "light" 112 | }, 113 | "output_type": "display_data" 114 | } 115 | ], 116 | "source": [ 117 | "tdim=2*(a**2)*rhop/(9*mu)\n", 118 | "t=np.linspace(0,0.01,101)\n", 119 | "t_star=t/tdim\n", 120 | "\n", 121 | "u_star=1-np.exp(-t_star)\n", 122 | "u_pc=0.999\n", 123 | "\n", 124 | "plt.plot(t_star, u_star)\n", 125 | "plt.xlabel('t*')\n", 126 | "plt.ylabel('u*')\n", 127 | "plt.show()\n", 128 | "plt.plot(t_star*tdim,u_star*ulim)\n", 129 | "plt.plot([0,-np.log(1.-u_pc)*tdim], [u_pc*ulim,u_pc*ulim ],'--')\n", 130 | "plt.plot([-np.log(1.-u_pc)*tdim,-np.log(1.-u_pc)*tdim], [0,u_pc*ulim ],'--')\n", 131 | "plt.xlabel('t (s)')\n", 132 | "plt.ylabel('u (m/s)')\n", 133 | "\n", 134 | "print (' On aura atteint', u_pc*100,' % de la valeur limite pour un temps de', -np.log(1.-u_pc)*tdim, 's')" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": null, 140 | "metadata": {}, 141 | "outputs": [], 142 | "source": [] 143 | } 144 | ], 145 | "metadata": { 146 | "kernelspec": { 147 | "display_name": "Python 3", 148 | "language": "python", 149 | "name": "python3" 150 | }, 151 | "language_info": { 152 | "codemirror_mode": { 153 | "name": "ipython", 154 | "version": 3 155 | }, 156 | "file_extension": ".py", 157 | "mimetype": "text/x-python", 158 | "name": "python", 159 | "nbconvert_exporter": "python", 160 | "pygments_lexer": "ipython3", 161 | "version": "3.7.4" 162 | } 163 | }, 164 | "nbformat": 4, 165 | "nbformat_minor": 2 166 | } 167 | -------------------------------------------------------------------------------- /L3_sep4_Adsorption.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Adsorption \n", 8 | "\n", 9 | "Aqueous solution with 0.09 kg of phenol per m3 has to be treated by adsorption of phenol on activated carbon. This treatment is realized in a tank by batch of 4 m3 with 100 g of activated carbon.\n", 10 | "\n", 11 | "**a) What is the phenol concentration in the water when equilibrium is reached ?**\n", 12 | "\n", 13 | "Data :\n", 14 | "Adsorption isotherm of phenol $m = \\frac{C}{5.13 10^{-3} C + 4.06 10^{-2}} $\n", 15 | "with $m$ in kg of adsorbed phenol / kg of activated carbon,\n", 16 | "and $C$ in kg of phenol per m3 of solution.\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 10, 22 | "metadata": {}, 23 | "outputs": [ 24 | { 25 | "name": "stdout", 26 | "output_type": "stream", 27 | "text": [ 28 | "We could calculte the quantity adsorbed from the initial condition :\n", 29 | "2.1918235241112765 kg Ph ads/kg AC\n", 30 | "that corresponds to a mass adsorbed on 0.1 kg of activated carbon of\n", 31 | "0.21918235241112766 kg Ph ads\n", 32 | "By mass balance, the final concentration should be :\n", 33 | "0.03520441189721808 kg Ph/m3\n", 34 | "THIS SOLUTION IS WRONG : the final concentration should be in equilibrium with the activated carbon. \n" 35 | ] 36 | } 37 | ], 38 | "source": [ 39 | "mac=0.1 #kg\n", 40 | "ci=0.09 #kg Ph/m3\n", 41 | "a=5.13e-3\n", 42 | "b=4.06e-2\n", 43 | "m=ci/((a*ci)+b)#kg Ph ads/kg AC\n", 44 | "print ('We could calculte the quantity adsorbed from the initial condition :')\n", 45 | "print (m, 'kg Ph ads/kg AC')\n", 46 | "print ('that corresponds to a mass adsorbed on', mac, 'kg of activated carbon of')\n", 47 | "print (m*mac, 'kg Ph ads')\n", 48 | "\n", 49 | "v=4 #m3\n", 50 | "print ('By mass balance, the final concentration should be :')\n", 51 | "cf=(ci*v-m*mac)/v\n", 52 | "print (cf, 'kg Ph/m3')\n", 53 | "print ('THIS SOLUTION IS WRONG : the final concentration should be in equilibrium with the activated carbon. ')" 54 | ] 55 | }, 56 | { 57 | "cell_type": "markdown", 58 | "metadata": { 59 | "collapsed": true 60 | }, 61 | "source": [ 62 | ">

It is necessary to solve a set of equation consisting in :

\n", 63 | ">
  • Adsortion isotherm that gives the adsorbed mass, $m_{ads}$, at equilibrium with the final concentration, $c_f$
  • \n", 64 | ">$$m_{ads}=\\frac{c_f}{(5.113~10^{-3}c_f)+4.06~10^{-2}}$$\n", 65 | ">
  • Mass balance between i) the final phenol mass in the solution, $V~c_f$, and on the activated carbon $m_{ads}~M_{ac}$ and >ii) the initial mass, $V~c_i$
  • \n", 66 | ">$$V~c_f+m_{ads}~M_{ac}=V~c_i$$\n", 67 | "\n", 68 | "### Solution numérique" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 11, 74 | "metadata": {}, 75 | "outputs": [ 76 | { 77 | "name": "stdout", 78 | "output_type": "stream", 79 | "text": [ 80 | "The final concentration (at equilibrium) is determined by solving simultaneously the equilibrium and the mass balance :\n", 81 | "0.0559 kg Ph/m3\n", 82 | "1.3659851875908589\n" 83 | ] 84 | } 85 | ], 86 | "source": [ 87 | "# The function calculate the delta in the mass balance : this function has to zero if the mass balance is satisfied\n", 88 | "def f(cf):\n", 89 | " # the adsorbed mass is calculated from the final concentration that is also the one at equilibrium\n", 90 | " m=cf/((a*cf)+b) #kg Ph ads/kg AC\n", 91 | " # the mass balance should be satisfied \n", 92 | " # the function return the delta of mass balance that should be zero : final mass + adsorbed mass - initial mass \n", 93 | " return (cf*v+m*mac-ci*v)\n", 94 | "\n", 95 | "from scipy.optimize import newton\n", 96 | "x=newton(f, x0=ci)\n", 97 | "print ('The final concentration (at equilibrium) is determined by solving simultaneously the equilibrium and the mass balance :')\n", 98 | "print (round(x,4), 'kg Ph/m3')\n", 99 | "print(x/((a*x)+b))" 100 | ] 101 | }, 102 | { 103 | "cell_type": "markdown", 104 | "metadata": { 105 | "collapsed": true 106 | }, 107 | "source": [ 108 | "### Solution analytique\n", 109 | "\n", 110 | "It exists an analytical solution. It is possible to obtain a second order polynomial equation by combining the two equation :\n", 111 | "\n", 112 | "$$m_{ads}=\\frac{c_f}{a~c_f+b}$$\n", 113 | "\n", 114 | "$$m_{ads}=V(c_i-c_f)/M_{ac}$$\n", 115 | "\n", 116 | "$$V(c_i-c_f)=\\frac{c_f M_{ac}}{a~c_f+b}$$\n", 117 | "\n", 118 | "\n", 119 | "$$V(c_i-c_f)(a~c_f+b)=c_f M_{ac}$$\n", 120 | "\n", 121 | "$$Vc_ia~c_f+Vc_ib-Vc_fa~c_f-Vc_fb-c_f M_{ac}=0$$\n", 122 | "\n", 123 | "$$ -Vac_f^2+c_f(Vc_ia-Vb-M_{ac})+Vc_ib=0$$\n", 124 | "\n" 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": 15, 130 | "metadata": {}, 131 | "outputs": [ 132 | { 133 | "name": "stdout", 134 | "output_type": "stream", 135 | "text": [ 136 | "Equation to solve : -0.02052 x2 + -0.2605532 x + 0.014615999999999999 = 0\n", 137 | "Determinant : 0.06908765131024\n", 138 | "Solutions -12.753374736781964 0.055850370310229436\n", 139 | "When analysing the signs of the solutions, we can see that x1 will be always negative : we have to consider only x2\n", 140 | "The final concentration (at equilibrium) is :\n", 141 | "0.0559 kg Ph/m3\n" 142 | ] 143 | } 144 | ], 145 | "source": [ 146 | "A=-a*v\n", 147 | "B=a*v*ci-b*v-mac\n", 148 | "C=v*ci*b\n", 149 | "\n", 150 | "print('Equation to solve :', A,' x2 + ',B,' x + ',C, ' = 0')\n", 151 | "\n", 152 | "delta=B*B-4*A*C\n", 153 | "print('Determinant : ',delta)\n", 154 | "x1=(-B+delta**0.5)/(2*A)\n", 155 | "x2=(-B-delta**0.5)/(2*A)\n", 156 | "print ('Solutions', x1,x2)\n", 157 | "print ('When analysing the signs of the solutions, we can see that x1 will be always negative : we have to consider only x2')\n", 158 | "print ('The final concentration (at equilibrium) is :')\n", 159 | "print (round(x2,4), 'kg Ph/m3')\n" 160 | ] 161 | }, 162 | { 163 | "cell_type": "markdown", 164 | "metadata": {}, 165 | "source": [ 166 | "La solution analytique est donc : \n", 167 | "$$ c_f=\\frac{-(Vc_ia-Vb-M_{ac})-\\sqrt{(Vc_ia-Vb-M_{ac})^2-4Va}}{-2V^2abc_i} =0$$" 168 | ] 169 | }, 170 | { 171 | "cell_type": "code", 172 | "execution_count": null, 173 | "metadata": {}, 174 | "outputs": [], 175 | "source": [] 176 | } 177 | ], 178 | "metadata": { 179 | "kernelspec": { 180 | "display_name": "Python 3 (ipykernel)", 181 | "language": "python", 182 | "name": "python3" 183 | }, 184 | "language_info": { 185 | "codemirror_mode": { 186 | "name": "ipython", 187 | "version": 3 188 | }, 189 | "file_extension": ".py", 190 | "mimetype": "text/x-python", 191 | "name": "python", 192 | "nbconvert_exporter": "python", 193 | "pygments_lexer": "ipython3", 194 | "version": "3.9.12" 195 | } 196 | }, 197 | "nbformat": 4, 198 | "nbformat_minor": 2 199 | } 200 | -------------------------------------------------------------------------------- /L3_sep5_electrophoresis.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "9b652d37", 6 | "metadata": {}, 7 | "source": [ 8 | "## Electrophorèse continue\n", 9 | "\n", 10 | "On souhaite séparer deux protéines la Sérum albumine Bovine (SAB) et l’$\\alpha$-lactalbumine (ALPHA) en jouant sur leur charge. La mobilité électrophorétique des protéines est déterminée en divisant la vitesse de déplacement électrophorétique (mesurée à 20°C dans de l’eau à pH 7) au champ électrique appliqué (u/E). La SAB et l’ALPHA ont des mobilités de -15 10-9 m2.V-1.s-1 et -22.10-9 m2.V-1.s-1. \n", 11 | "\n", 12 | "Pour la séparation, on réalise une électrophorèse en écoulement continu au sein d’une veine liquide parallélépipédique de 30 cm de longueur (Lx), 5 cm de largeur (Ly), et 1 cm d’épaisseur (Lz). On applique, parallèlement à l’écoulement, Q, une différence de potentiel de 24 V. Les deux protéines sont injectées au centre de la veine liquide. Le champ électrique entraîne un déplacement dans la direction y qui se combine à l’écoulement du liquide suivant x dû au débit Q. \n", 13 | "\n", 14 | "a) Déterminer la vitesse électrophorétique des deux protéines dans ces conditions\n", 15 | "\n", 16 | "b) En déduire le temps nécessaire pour que les deux protéines soient séparées de 5 mm lorsqu’on applique le champ électrique\n", 17 | "\n", 18 | "c) En déduire le débit de la veine liquide à appliquer pour que la séparation des protéines en sortie de veine liquide, $\\Delta$y, soit de 5 mm \n", 19 | "\n", 20 | "d) En sortie de la veine liquide, on récupère l’écoulement dans une 50 petits capillaires d’un diamètre de 1 mm régulièrement espacés sur Ly et numérotés depuis l’anode vers la cathode. Dans quels numéros de capillaires devraient sortir la majorité de SAB et l’$\\alpha$-lactalbumine ?\n" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 28, 26 | "id": "cad27627", 27 | "metadata": {}, 28 | "outputs": [ 29 | { 30 | "name": "stdout", 31 | "output_type": "stream", 32 | "text": [ 33 | "vitesse pour SAB -7.20e-06 m/s\n", 34 | "vitesse pour ALPHA -1.06e-05 m/s\n", 35 | "temps en sec nécessaire 1488.0952380952385\n", 36 | "débit 1.0079999999999996e-07 m3/s\n", 37 | "débit 362.8799999999999 mL/h\n", 38 | "décalage pour SAB -0.010714285714285716\n", 39 | "décalage pour ALPHA -0.01571428571428572\n", 40 | "position SAB par rapport à l anode en m 0.014285714285714285\n", 41 | "position ALPHA par rapport à l anode en m 0.009285714285714283\n", 42 | "numéro de capillaire SAB 14\n", 43 | "numéro de capillaire ALPHA 9\n" 44 | ] 45 | }, 46 | { 47 | "data": { 48 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAASMAAAD3CAYAAABW+DKgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAZRUlEQVR4nO3deZRcZZ3G8e+v905ng4DsJgOiyHYYPUzUcQRHEUEU1GEJMoLggoJndFxYxKm0oKLjIHhcQB1BwBBBZWQZNnECsomICBr0yBIIhCWQdOp2d5ZO9zt/vG91biq131tdS57POXW6qu6te391u+qp97236r3mnENEpNE6Gl2AiAgojESkSSiMRKQpKIxEpCkojESkKSiMRKQpTFkYmdlNZnbiVK0vrPNsM/thHZe/zMzeXq/l15uZfd7MLjezjnD7lWY2bGadDazpYDN7ZorXudDMrpzidf6Tmf21Tst2ZvaqcP1iM/tiSssdNrPdi0w7yczuSrL8rnIrj92cBqwHxsPtjznnflLpipxzh1Vf3hb1LARe5Zw7ocJ1fiXpOluZmR0MXOmc27XAtMOA1wEfcM5NADjnngamT2WNWyvn3G+A10zBek5NcVl1fW2UDKP4ys1sGfBh59yv8uczsy7n3Mb0y6ufVqw5X5Ln4Jy7Cbgp5ZJEalZTNy3XlDazM8zseeBSM9vGzG4ws5Vmtjpc3zX2mCVm9uHY7ZPN7NEw7y1mNjc2bR8zu83MVpnZC6G79U7gbODY0Fz8Y5h3ZzO7Lsz7mJl9JLacyea3mc0LzddTzOxp4Nfl6ijwvP/VzJ4ys5fN7At50zrM7EwzezxMv9rMtg3T+szsynD/kJn9zsx2KLKOZWZ2lpktDTVdamZ9JbZ7r5ldaGYrwuXCcN8APmx2DttrOGyrUnXmtlFX7H92rpndbWaRmd1qZtvFan2Dmd0TntMfQ0ssN+0kM3siPO5JM/tAkefbb2aXhee6FDgwb3qu1ihsk/fmreMuM/tGePyTocVXVQ0FarrGzJ43szVmdqeZ7VNkvuPM7IG8+z5tZteF672htqfD6/hiM+uP/y9jj1tmZp81s4fDen+a+7+H6UeY2UNhW99jZvtX+FwuM7PzYrc/Z2bPhdfKybZ5ly7/PbpZ1ytv3jnm33dZM7sf2CNvvXvZpvfwX83smLLFOucqugDLgLeH6wcDG4GvAb1APzAHeD++OzcDuAb4n9jjl+BbVgBHAY8Br8W3zs4B7gnTZgDPAZ8B+sLt+WHaQny3I17XHcB3w7wHACuBt+XPD8wDHHA5MBBqLlpHgee/NzAMvCU85wvCNshtk08B9wG7humXAFeFaR8Drg/bphN4PTCzxHb+E7AbsC1wN3Beie3+pbDeVwDbA/cA58bmfyZv+aXqzG2jrtj/7HHg1WFdS4Dzw7RdgJeBw/EfaoeE29uH7ZsFXhPm3QnYp8jzPR/4TXiuu4Xn/kxs+tHAzmEdxwIjwE5h2knAGPCRsF0/DqwArMoaFhJ7XQEn4193vcCFwENFHjcNiIA9Y/f9DjguXL8QuC48txnhNfDVQv+b8H+/PzzXbYFHgVPDtNcBLwLzw/M8MczfW6Quh9+dAXAZm14/7wReAPYN22dR3rxLCO/R2Pa9q8hyFwNXh+XsCzybmzfctxz4EP599TrgpWLbf3L5CcJoA9BXYv4DgNVFwugm4JTYtA5gFJgLLAD+UOGLZjf8PqwZsfu+ClxWIox2j81btI4C6/4PYHHs9kDYBrlt8ighBGMv/rHwzzgZHxL7V7idT43dPhx4vNh2x4fF4bHbhwLLSoRRqTpz2ygeRufE5v0EcHO4fgZwRd6yb8G/UQaAIfyHU3+Z5/sE8M7Y7Y/m15w3/0PAkbE3y2N54eCAHausYbPXVd602WGZs4pMvxL4j3B9T3w4TcMH4giwR2zeNwJPFvrfhP/7CbHbXwcuDte/R/iAiU3/K3BQkZqKhdGPCB8m4farqSGM8IE4BuwVm/YVNoXRscBv8mq6BMiU+j8kOZq20jm3LnfDzKaZ2SXmuzFZ4E5gthU+MjMXuCg0OYeAVfh/3i74gHm8whp2BlY556LYfU+F5RSzvMI6Cq1r8rHOuRF8SyC+rGtjy3oUH5Q7AFfg36iLQ/P462bWXWGNT4V152y23cO0p0rMn69UnYU8H7s+yqYd3HOBo3PLCct6M77VMoJ/QZ4KPGdmN5rZXkWWv9l2zXsumNkHY92TIfyn8HaxWSbrc86NhqvTq6whvr5OMzs/dA2z+JAgb51xi/AfoADH43sDo/gW4jTg97Habw73F1NqW38mb1vvRun/cyElt3UVtsd/eBVb1lxgfl69H8B/SBSVJIzyf+7/GfzRgfnOuZn47gz4N3e+5fijcbNjl37n3D1h2h4FHlNonSuAbc1sRuy+V+KbjJXUXaqOfM/hXwD+SZlNw3dN48s6LG9Zfc65Z51zY865Qefc3sCbgCOAD5aocbfY9VeG51mofsK0+H6u+PyFhmQoWmeJegpZjm8ZxZcz4Jw7H8A5d4tz7hB8y+svwA+KLGez7RrqB8D8/rsfAKcDc5xzs/HduEKvqS1UUUPc8cCRwNuBWfjWIiXWeSuwnZkdgA+lReH+l4C1+K5JbvvMcrUdkVoOfDlvW09zzl1V5XKKbutgBB+gOcXCYyV+d0GxZS0H7sird7pz7uOlikvze0Yz8Bt/yPwO0UyJeS8GzsrtGDSzWWZ2dJh2A7CjmX0q7ACcYWbzw7QXgHkWvhfjnFuO7/581fxO4v2BU4BKv3JQqo58PwOOMLM3m1kPfl9NfPtdDHw5vIEws+3N7Mhw/a1mtl9oJWbxTdxxijvNzHYN2/Fs4Kcl5r0KOCesbzt8dzL3nZkXgDlmNquSOqt0JfBuMzs0tCb6wk7ZXc1sBzN7j/md6Ovx+9qKPd+r8f+Dbcwf8PhkbNoAPlBXhlo/hG8ZlVVlDXEzwvwv49+YJb8e4vzRzJ8B/4nf13NbuH8CH37fNLNXhJp2MbNDK6k/zw+AU81svnkDZvauvA/hSlwNnGRme4cP0/z36EPA+0Iv51X499IWnHPjwC+AhWHevfHd85wbgFebP+DTHS4HmtlrSxWXZhhdiN/J+RJ+B+nNxWZ0zl2L3wm7ODSF/wQcFqZF+J2h78Y3W/8GvDU89Jrw92UzezBcX4D/9FoBXIvvl95WScGl6igw75+B0/CffM8Bq4H4l/Muwu+svNXMorANciG6I/4Fm8V3i+5gU2AUsgj/iftEuJxXYt7zgAeAh4FHgAdz8zvn/oIPqydCc3nnMnVWLHwQHIkPy5X4T8PP4V9THfiW8gp81/cg/P6mQgbxTfwnw3O+IraOpcB/Affig3U//A79SlRTQ9zloZ5ngaX47VPOInxL6hq3+VctzsAfILkvvL5+RQ3fLXLOPYDfSf9t/OvuMfz+nGqXcxP+ffrrsIxf583yTfw+yReAH1P6Q/10fDfyefx+qUtj64mAdwDH4bf/82w66FKUhZ1LdWdmdwI/dM5dPiUrbFFW4vtcImkzM4c/GvhYo2uZkp+DhCbh7vhPPxGRLdQ9jEJ/+Xl81yTRb1dEpH1NWTdNRKQUDSEiIk1BYSQiTUFhJCJNQWEkIk1BYSQiTUFhJCJNQWEkIk1BYSQiTUFhJCJNQWEkIk2h5NlBpP3NO/PGj+IHFNvMBnuiP+q6ZYeZG49a0TOx44bM7d+fd+9u+w3d8po3DdWplEXLzn/X9+u0bGkBahnJ8fjxyjczZiv6hrtunLvRnul3Zpzw4I2vfMuyP2xTpxoOoEAgytZFP5Tdys0788YlAMvOf9fB8ftt0ObjBxY73GXcTfjBwX6Ec5+aqhpk66KWkRSTO8nBzPB3LX4kT5G6UBhJMbkwyo2zrDCSulIYSTHZ8DcXRqMojKSOFEZSzHD4q26aTAmFkRTkMm4cfx4tddNkSiiMpJQItYxkiiiMpJSIzVtG00rMK5KIwkhKyaJumkwRhZGUom6aTBmFkZQSbxnp0L7UlcJISlHLSKaMwkhKyd+B3Y+ZNbAeaWMKIykly+Ytow6gu3HlSDtTGEkpEdBrg9aNDyPQ4X2pE4WRlBL/fVoujLTfSOpCYSSlxIcRURhJXSmMpJR4y2g0XFcYSV0ojKQUtYxkyiiMpJT4AGsKI6krhZGUoh3YMmUURlJKoW6aDu1LXSiMpBS1jGTKKIyklPjQswojqSuFkRTlMm4jPoR0aF/qTmEk5eSGEVHLSOpKYSTl5IYRURhJXSmMpBzfMnJuI7ARhZHUicJIyskfYE2H9qUuFEZSzpYDrInUgcJIyskfYE1hJHWhMJJy4i0jDcovdaMwknJ07jSZEgojKScC+m3QulAYSR0pjKSc/N+nKYykLhRGUk7+L/d1aF/qQmEk5eQPsKaWkdSFwkjKUTdNpoTCSMqJd9N0aF/qRmEk5ahlJFNCYSTl5O/A7sfMGliPtCmFkZSTvwO7A+huXDnSrhRGUk6h0xXp8L6kTmEkJbmMGwPWoQHWpM4URlIJDT0rdacwkkrkBljToPxSNwojqURuGBG1jKRuFEZSCXXTpO4URlIJnSFE6k5hJJXIbxnp0L6kTmEklVDLSOpOYSSV0D4jqTuFkVQiAqb9ZQ7rw22FkaROYSSViAC+dyCd4bbCSFKnMJJKZAF+vjdd4XZ7h5HZSZj9HrMIs9WY/QGzC4rM+3eYOcyeLjiagdnCMD13GcXsEcw+Wu+n0WoURlKJCODZmQwAG2nnMDI7C/ghcAvwPuCDwC+B9xR5xILwdzfgH4vMswZ4Y7i8G7gduASz41Oqui10lZ9FZIsB1tr50P7pwCU4d3bsvusxGywy/wLgPmC/cP2uAvNsxLn7Yrdvx+xNwFHAouQltwe1jKQSWw6w1r5mA89vca9zbov7zPYB9gUuBa4Djsas0g/4CI0LtRmFkVRiazpDyIPAJzE7EbM5ZeY9Ht9t/TlwFbA98LaCc5p1hctMzE4ADgKuTa/s1qcwkkrEu2ntPij/acAwcBmwErM/Y/YlzGYWmPc44Dacexm/j2k1m/Yhxc0BxsJlDXAF8B2cu7wO9bcshZFUYuvppjn3MPBa/A7r7wIGfBF4ALPpk/OZzQd2BxaHx20AfgG8F7O+vKWuAQ4MlzcD/waciFmmnk+l1SiMpBJbUzcNnFuPc9fj3Ok4tzfwYWBP4JTYXAvwLZ0lmM3GbDZwIz6wD89b4kaceyBc7sa5bwHnAmdjtm3dn0+LUBhJWS7jNgDr2RpaRoU499/AKmAvAMw6gGPwO6CfwnfPVuNbRlC4q5ZvKdAD7JFytS1Lh/alUvEB1rZvcC31Y/YKnHsx777tgVnAC+Geg4GdgDOA+/OW8CHgGMxm4FxEcfuGv8uTltwuFEZSqfiPZdu5ZfQIZr8EbgVeBOYCn8XvuP9xmGcBMARchHPrN3u0WRb/Rcmj8DuqAbowe0O43gO8HjgH+CXObfk1gq2UwkgqlRtGZDXtHUZfAo4EvgVsi//O0T3AsTj3JGbdwPuBa7YIIgDnHsRsKf6wfy6MZgH3hutj+K7dxcB5dXweLUdhJJXKtYyepZ3DyLnvAN8pMX0MH1KllrFP7PpCYGEapbU77cCWSsUHWGvfMJKGURhJpeI7sPsL/kJdJAGFkVQqy6aWUQf6XZWkTGEklco/d1o7/3JfGkBhJJXKAgPrOlkXbmu/kaRKYSSVigCWzyI3lIbCSFKlMJJKZQGWzVYYSX0ojKRSEcCy2ZOvGYWRpEphJJXy3bSZCiOpD4WRVCoLsGKmTlck9aEwkkpFAM9Nn/wJkQ7tS6oURlKpLMBL0ya/7KiWkaRKYSSVigBW9dMbbiuMJFUKI6lUBLCml55wW2EkqVIYSUVcxq0HNoz2kBtsXmEkqVIYSTWitV2TIaQwklQpjKQa2YkOpuNPXKgwklQpjKQa8QHWdGhfUqUwkmpsPsCaSIoURlKN+ABrCiNJlQbkl2pE+FM6j9LmYWSDZsATwDxgT5dxj8WmHQz8H7Cfy7g/FXn8MvxpjsCfEeQJ4CfA18JJMXPz/Mxl3GcLPN4Bn3QZ9+28+wfwp1AyYAeXKXlutpailpFUY2s5dxrAG/FBBHBcjctYFJZzCLAYyABfSVjXkfj9df3hettQGEk1tqYzhCwARoDfUtnpqgt5zmXcfS7j7nAZtxC4DDg1tLqS1PVkuNRaV1NSGEk1ssD0cWvvMLJB6wSOBq4DfgTsbYO2fwqL/j0wAGxXY13bAIfiW1mLgXfYoM1Joa6moH1GUo0IYHUfY9utbetD+/8M7IB/w98FfBvfCnk44XLnARuAVbH7zAat0vfhv+DPyrIYcMBZ4b5LEtbVFNQykmpEAC9Pa/svPS4AhoCbXcatAm4Djquhe2U2aF02aNNs0I4ATgWudxk3Hpvn3/E7uPMvxep61GXcwy7jHgGW0kZdNYWRVCM3jMg4bRpGNmi9wHuBa3NHvYCr8K2aN1S5uFzQjADXA3cCp+XNcyVwYIFLfl07AQfhW0U5VwFvsUHbpcq6mpK6aVKNCGDlQPuGEXAYMBv4Xxu02eG+JcB6fCvk3iqWdSVwUXjssiKH4V9wGfdA/p02uEUj7Fh84+HmWF03AeeGaRdUUVdTUhhJNXItI0f7hlGu23NNgWnH2KB9uoplFQyaGuXq+m2RaQoj2ar4lpHfdd2PmeGcK/mIFmKDNh04At/9+X7e5L/Hv+Hfiv+h8FTWtTvwD8A38Uf44g4DPm+DtqfLuL9NZV1pUxhJNXI7sMF3GbrxR4faRe4LhRe5jNusBWKDdjfwBXwr5Ipw9yE2aHvlLWOpy7ilKde1AJgAvuEybkVeXUvx+6aOw3fZWpZ2YEs1sgCr+idfN+12eH8B8Lf8IAJwGTcGXA28DyaH3r0A352LX46pU1235wdRqOtF/NG+lj+qppaRVCP3PaP46YqGGlZNylzGHVFm+ieAT4SbJQ/zu4ybV8H6is7jMs5i1/cts5zDy62rFahlJNVYD4wN9encaZI+hZFUzGWcA6Jsr05XJOlTGEm1ouEehZGkT2Ek1cqOdOvcaZI+hZFUK1qnMJI6UBhJtbLrOyfPndZuh/algRRGUq1orHMyhNQyktQojKRa2Y0dCiNJn8JIqhVNGNPDdYWRpEZhJNWKHAyEX8cqjCQ1CiOpVhbDRnoAhZGkSGEk1YoA1vS2/dCzMsUURlKtLEC2l/Xo0L6kSGEk1YoAhvpYj1pGkiKFkVQrF0ZjKIwkRQojqVYWYKiPDSiMJEUKI6lWBLCqv63PECINoDCSauVaRgojSZXCSKrlh57tb+vTFUkDKIykWuuA8aFeHDq0LylSGElVwtCz2TV+EBG1jCQ1OjuI1CJa00cH0NPoQqR9qGUktchmezDUMpIUKYykFtFwL10ojCRFCiOpRTTSTSfQj1nJkxmKVEphJLXIjnTTg3/9dJebWaQSCiOpRbSuezKEdHhfUqEwklpk13fqdEWSLoWR1CIa66RPQ89KmhRGUousM2zUd9QURpIKhZHUIgLI+o6awkhSoTCSWkQAkcJIUqQwklpkASKdIURSpDCSWsS7aTq0L6lQGEktfMtI3TRJkcJIaqEd2JI6hZHUwu/A1j4jSZHCSGqhbpqkTmEktViLY0LdNEmTwkiq5jLOYWSzvUygMJKUKIykVlE4XZEO7UsqFEZSq2iNWkaSIoWR1Cq7pk/nTpP0KIykVlG2V2Ek6VEYSa2ykc4QIilSGEmtoqhXYSTpURhJrbKTZwgRSYHCSGoVjXbTNaFD+5IShZHUKprogNFuhZGkQ2EktcoCZHsVRpIOhZHUKjeMiMJIUqEwklplAYZ76Gt0IdIeFEZSq9yg/L2YWaOLkdanMJJaRQDDPXTA5KmuRWqmMJJaxQdY034jSUxhJLXSONiSKoWR1ErnTpNUKYykVqPmcGoZSVoURlITl3Guc4K1GpRf0qIwkpp1TTCilpGkRWEkNet0jGifkaRFYSQ163BEOrQvaVEYSc3MMaxumqRFYSRJrFE3TdKiMJKaTRhr1DKStCiMpGbjHQzp0L6kpavRBUjr2tDJqrEOGDf6OxtdjLQ8tYykZuMdZDd2QraXGY2uRVqfwkiSyAK8NI1ZjS5EWp/CSJKIAFb1M7PRhUjrUxhJEhHAml6mN7oQaX0KI0kiN8CawkgSUxhJErlxsAcaXYi0PoWRJJEFGNGJHCUFCiNJIjcov770KIkpjCSJCGC0W+dOk+QURpLEiDkY6aa30YVI61MYSc1cxk30bmRspIeeRtcirU9hJIn0b2TDaLdO4ijJKYwkkd6NrB/u0Q+uJTmFkSTSM8660W66MLNG1yKtTWEkifSOszYMsKaumiSiMJJEesYnz52mLz5KIgojSaRnnGGNgy1pUBhJIt3jOpGjpENhJIl0T5CNemFDh8JIklEYSSLd40RjnbB8lkZ7lGQURpJI14T/5f7j27Bto2uR1qYwkkS6JhgCeHFAYSTJKIwkkU7nw2h1P3MaXIq0OIWRJNI1wSqA4R7tM5JkFEaSSIebDKPZDS5FWpzCSBKZMF4CWNut0xVJMgojSWTcWAmwtktnlZVkFEaSyIsDIYy6dboiSUZhJIncvytrANZ1KYwkGQ2KJQcBzDvzxiW1PHguN/ByxxEM9e1yQK3LAA4AHqrxsdIm1DKSxA5csd3abrfrcIJFPAQsSqkcaVHmnGt0DSIiahmJSHNQGIlIU1AYiUhTUBiJSFNQGIlIU1AYiUhTUBiJSFNQGIlIU1AYiUhTUBiJSFNQGIlIU1AYiUhTUBiJSFNQGIlIU1AYiUhT+H8W/eeBEBEFvgAAAABJRU5ErkJggg==\n", 49 | "text/plain": [ 50 | "
    " 51 | ] 52 | }, 53 | "metadata": { 54 | "needs_background": "light" 55 | }, 56 | "output_type": "display_data" 57 | } 58 | ], 59 | "source": [ 60 | "import numpy as np\n", 61 | "import matplotlib.pyplot as plt\n", 62 | "\n", 63 | "#mobilites\n", 64 | "mSAB=-15e-9\n", 65 | "malpha=-22e-9\n", 66 | "#viscosite de l'eau\n", 67 | "mu=0.001\n", 68 | "#geometrie\n", 69 | "lx=0.3\n", 70 | "ly=0.05 #m\n", 71 | "lz=0.01\n", 72 | "#potentiel applique\n", 73 | "V=24 #V\n", 74 | "\n", 75 | "#Champ electrique\n", 76 | "E=V/ly\n", 77 | "vol=lx*ly*lz\n", 78 | "\n", 79 | "#vitesse electrophoretique\n", 80 | "uSAB=mSAB*E\n", 81 | "ualpha=malpha*E\n", 82 | "print ('vitesse pour SAB {:.2e} m/s'.format(uSAB))\n", 83 | "print ('vitesse pour ALPHA {:.2e} m/s'.format(ualpha))\n", 84 | "\n", 85 | "DY=5e-3 #m\n", 86 | "t=DY/(uSAB-ualpha)\n", 87 | "print('temps en sec nécessaire ', t)\n", 88 | "print('débit',vol/t, ' m3/s')\n", 89 | "print('débit', 1e6*vol/(t/3600), ' mL/h')\n", 90 | "\n", 91 | "#calcul du déplacement des protéines\n", 92 | "DYSAB=uSAB*t\n", 93 | "DYalpha=ualpha*t\n", 94 | "\n", 95 | "print('décalage pour SAB ', DYSAB)\n", 96 | "print('décalage pour ALPHA', DYalpha)\n", 97 | "print('position SAB par rapport à l anode en m',ly/2+DYSAB)\n", 98 | "print('position ALPHA par rapport à l anode en m',ly/2+DYalpha)\n", 99 | "print('numéro de capillaire SAB ', int(round((ly/2+DYSAB)/1e-3,0)))\n", 100 | "print('numéro de capillaire ALPHA', int(round((ly/2+DYalpha)/1e-3,0)))\n", 101 | "\n", 102 | "fig, ax = plt.subplots(figsize=(4, 4))\n", 103 | "ax.set_aspect( 1 )\n", 104 | "plt.axis('off')\n", 105 | "plt.plot([0,ly,ly,0,0],[0,0,lx,lx,0])\n", 106 | "plt.plot([ly/2+DYSAB,ly/2],[lx,0],'r')\n", 107 | "plt.plot([ly/2+DYalpha,ly/2],[lx,0],'g')\n", 108 | "plt.text(0.1,0.2,'SAB',c='r', size=15)\n", 109 | "plt.text(0.1,0.15,'ALPHA',c='g', size=15)\n", 110 | "plt.title('Trajectoire des protéines dans la veine liquide')\n", 111 | "plt.show()" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": null, 117 | "id": "eb4b3b9e", 118 | "metadata": {}, 119 | "outputs": [], 120 | "source": [] 121 | } 122 | ], 123 | "metadata": { 124 | "kernelspec": { 125 | "display_name": "Python 3 (ipykernel)", 126 | "language": "python", 127 | "name": "python3" 128 | }, 129 | "language_info": { 130 | "codemirror_mode": { 131 | "name": "ipython", 132 | "version": 3 133 | }, 134 | "file_extension": ".py", 135 | "mimetype": "text/x-python", 136 | "name": "python", 137 | "nbconvert_exporter": "python", 138 | "pygments_lexer": "ipython3", 139 | "version": "3.9.12" 140 | } 141 | }, 142 | "nbformat": 4, 143 | "nbformat_minor": 5 144 | } 145 | -------------------------------------------------------------------------------- /L3_sep6_Donnan.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true 7 | }, 8 | "source": [ 9 | "# Donnan equilibrium in a membrane\n", 10 | "\n", 11 | "A negatively charged membrane having a concentration of charge of 10 mol/L (ZX=1) is used to retain salt. The concentration in co-ions in the solution is 1 mol/L. \n", 12 | "\n", 13 | "**a) Calculate the partition coefficient for MgCl2, Na2SO4 and NaCl.**\n", 14 | "\n", 15 | ">

    To calculate the concentration inside a membrane during Donnan exlusion, it is necessary to solve the equation :

    \n", 16 | ">\n", 17 | ">$$\\frac{c_B^{m}}{c_B}=(\\frac{|z_B| c_B}{|z_B| c_B^{m}+|z_X| c_X^{m}})^{\\frac{|z_B|}{|z_A|}}$$\n", 18 | "\n" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 8, 24 | "metadata": {}, 25 | "outputs": [ 26 | { 27 | "name": "stdout", 28 | "output_type": "stream", 29 | "text": [ 30 | "For Nacl , the concentration in co-ion inside the membrane should be : 0.099 mol/L\n", 31 | "For Mgcl2 , the concentration in co-ion inside the membrane should be : 0.311 mol/L\n", 32 | "For Na2SO4, the concentration in co-ion inside the membrane should be : 0.039 mol/L\n" 33 | ] 34 | } 35 | ], 36 | "source": [ 37 | "cb=1. #concentration of co-ion in mol/L\n", 38 | "zb=1. #valency of co-ion the membrane in mol/L\n", 39 | "za=2. #valency of counter-ion in the membrane in mol/L\n", 40 | "cxm=10. #concentration of charge in the membrane in mol/L\n", 41 | "zx=1. #valency of charge in the membrane in mol/L\n", 42 | "\n", 43 | "# Function that should be zero to satisfy the Donnan exclusion law\n", 44 | "def f(cbm):\n", 45 | " out=(cbm/cb)-((zb*cb/(zb*cbm+zx*cxm))**(zb/za))\n", 46 | " return out\n", 47 | "\n", 48 | "# Find cbm to satisfy Donnan exclusion \n", 49 | "from scipy.optimize import newton\n", 50 | "\n", 51 | "#For NaCl\n", 52 | "zb=1.\n", 53 | "za=1.\n", 54 | "x=newton(f, x0=cb)\n", 55 | "print ('For NaCl , the concentration in co-ion inside the membrane should be :', round(x,3), 'mol/L')\n", 56 | "#For MgCl2\n", 57 | "zb=1.\n", 58 | "za=2.\n", 59 | "x=newton(f, x0=cb)\n", 60 | "print ('For MgCl2 , the concentration in co-ion inside the membrane should be :', round(x,3), 'mol/L')\n", 61 | "#For Na2SO4\n", 62 | "zb=2.\n", 63 | "za=1.\n", 64 | "x=newton(f, x0=cb)\n", 65 | "print ('For Na2SO4, the concentration in co-ion inside the membrane should be :', round(x,3), 'mol/L')\n", 66 | "\n", 67 | "\n" 68 | ] 69 | }, 70 | { 71 | "cell_type": "markdown", 72 | "metadata": { 73 | "collapsed": true 74 | }, 75 | "source": [ 76 | "**b) Sort these electrolytes from the more excluded to the less excluded by the membrane.**\n", 77 | "\n", 78 | "> The exclusion is higher :\n", 79 | "- If the valency of the co-ions is more important (for Na2SO4)\n", 80 | "- For a same co-ions valency, if the valency of the counter-ions is less important (NaCl > MgCl2)\n", 81 | ">\n", 82 | ">This sorting rule will be satisfied in NanoFiltration or Reverse Osmosis processes even if the operating conditions (permeate flux ...) are modifying the values." 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": null, 88 | "metadata": {}, 89 | "outputs": [], 90 | "source": [] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": null, 95 | "metadata": {}, 96 | "outputs": [], 97 | "source": [] 98 | } 99 | ], 100 | "metadata": { 101 | "kernelspec": { 102 | "display_name": "Python 3 (ipykernel)", 103 | "language": "python", 104 | "name": "python3" 105 | }, 106 | "language_info": { 107 | "codemirror_mode": { 108 | "name": "ipython", 109 | "version": 3 110 | }, 111 | "file_extension": ".py", 112 | "mimetype": "text/x-python", 113 | "name": "python", 114 | "nbconvert_exporter": "python", 115 | "pygments_lexer": "ipython3", 116 | "version": "3.9.12" 117 | } 118 | }, 119 | "nbformat": 4, 120 | "nbformat_minor": 2 121 | } 122 | -------------------------------------------------------------------------------- /M1_Réaction_gaz_liquide.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Purification d'un gaz dans une colonne à bulle\n", 8 | "\n", 9 | "On purifie un gaz en faisant réagir une de ces impuretés avec un réactif en solution aqueuse dans une colonne à bulles. Lorsque le gaz est introduit dans la colonne de 1 m3 on constate une augmentation de volume de 30 l. Le diamètre moyen des bulles est de 2 mm. \n", 10 | "\n", 11 | "**Calculer la surface de l’interface gaz-liquide dans la colonne**\n", 12 | "\n", 13 | ">Il est possible de calculer le nombre de bulles en divisant le volume de gaz introduit 30L par le volume d'une bulle. On peut ensuite multiplier le nombre de bulles par la surface d'une bulle. \n", 14 | "> Plus simplement, on peut considérer la surface spécifique de sphère, 3/R (en m2/m3). La surface de l'interface est alors la surface spécifique fois le volume de gaz. " 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 26, 20 | "metadata": {}, 21 | "outputs": [ 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "4.188790204786391e-09\n", 27 | "7161972.43913529\n", 28 | "Surface de l'interface 90.0 m2\n", 29 | "3000.0\n", 30 | "Surface de l'interface 90.0 m2\n" 31 | ] 32 | } 33 | ], 34 | "source": [ 35 | "import numpy as np\n", 36 | "V_bulles=30e-3 #m3\n", 37 | "R_bulle=1e-3 #m\n", 38 | "V_bulle=4*np.pi*R_bulle**3/3\n", 39 | "print (V_bulle)\n", 40 | "nb_bulles=V_bulles/V_bulle\n", 41 | "print (nb_bulles)\n", 42 | "S=nb_bulles*4*np.pi*R_bulle**2\n", 43 | "print ('Surface de l\\'interface',round(S,2),'m2')\n", 44 | "# plus simple à partir de la surface spécifique en 2 lignes\n", 45 | "a=3/R_bulle\n", 46 | "print (a)\n", 47 | "S2=a*V_bulles\n", 48 | "print ('Surface de l\\'interface',round(S2,2),'m2')" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": {}, 54 | "source": [ 55 | "**Calculer la vitesse ascensionnelle des bulles dans la colonne (voir rappel de mécanique des fluides).**\n", 56 | "\n", 57 | ">L’application de la loi de Stokes peut permettre d’estimer la vitesse ascensionnelle des bulles \n", 58 | "$$u=\\frac{2R^2}{9\\mu}(\\rho_L-\\rho_G)g$$ si l'écoulement est laminaire Re<1\n", 59 | "Si on calcule la vitesse avec cette relation, on trouve une vitesse d'ascension de 2,17 m/s soit un nombre de Re égale à 4350. La loi de Stokes n’est pas valide pour estimer la vitesse des bulles. Le résultat est donc FAUX.\n", 60 | ">\n", 61 | ">On doit alors considérer les équations donnant la force par l’intermédiaire du facteur de friction en écoulement turbulent :\n", 62 | ">$$F_{gravité}-F_{Archimède}+F_{trainée}=0$$\n", 63 | ">$$V_b(\\rho_G-\\rho_L)g+\\frac{1}{2}\\rho_Lu^2\\pi R^2f=0$$\n", 64 | ">\n", 65 | ">avec un facteur de friction $f$ qui s'écrit :\n", 66 | ">- $f=\\frac{24}{Re}$ si Re<1 (équation de Stokes)\n", 67 | ">\n", 68 | ">- $f=\\frac{18.5}{Re^{3/5}}$ si 1\n", 70 | ">- $f=0.44$ si Re>500\n", 71 | ">\n", 72 | ">Si on applique f=0.44, on trouve u=0,24 m/s et un Re=243, ce qui respecte par Re>500 et est donc FAUX.\n", 73 | ">\n", 74 | ">En appliquant la formule de Balsius 1500:\n", 102 | " fr=0.44\n", 103 | " else:\n", 104 | " fr=18.5*Re**(-3/5) \n", 105 | " f=V_bulle*(rho_g-rho_l)*g+0.5*rho_l*u**2*np.pi*R_bulle**2*fr\n", 106 | " return f\n", 107 | "u=newton(f,x0=1)\n", 108 | "Re=rho_l*u*2*R_bulle/mu\n", 109 | "print ('La vitesse ascentionnelle de la bulle est de', round(u,2), 'm/s et le nombre de Reynolds est de', round(Re,2))" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "\n", 117 | "Le coefficient de diffusion de l’impureté est de 1,5.10-9 m2.s-1 et la réaction en phase liquide peut être considérée comme une réaction du premier ordre de 0,15 s-1. \n", 118 | "\t\n", 119 | "**Estimer le coefficient de transfert de matière en utilisant la relation de Frössling :**\n", 120 | "$$Sh=0.552Re^{0.5}Sc^{0.33}$$" 121 | ] 122 | }, 123 | { 124 | "cell_type": "code", 125 | "execution_count": 22, 126 | "metadata": { 127 | "scrolled": true 128 | }, 129 | "outputs": [ 130 | { 131 | "name": "stdout", 132 | "output_type": "stream", 133 | "text": [ 134 | "le coefficient de transfert de matière est de 7.74e-05 m/s\n", 135 | "666.6666666666666\n", 136 | "103.24324293014652\n", 137 | "7.74324321976099e-05\n", 138 | "1.937172780743804e-05\n" 139 | ] 140 | } 141 | ], 142 | "source": [ 143 | "D=1.5e-9 #m2/s\n", 144 | "Sc=mu/(rho_l*D)\n", 145 | "Sh=0.552*Re**0.5*Sc**0.33\n", 146 | "k=Sh*D/(2*R_bulle)\n", 147 | "print('le coefficient de transfert de matière est de', \"%.2e\"%k, 'm/s')\n", 148 | "print (Sc)\n", 149 | "print (Sh)\n", 150 | "print (k)\n", 151 | "print (2*R_bulle/Sh)\n" 152 | ] 153 | }, 154 | { 155 | "cell_type": "markdown", 156 | "metadata": {}, 157 | "source": [ 158 | "**Vérifier que le procédé utilisé est adapté en calculant le nombre de Hatta.**\n", 159 | "\n", 160 | ">Le nombre de Hatta est alors de 0,194. La valeur de ce nombre indique que la réaction est relativement lente et constitue l’étape limitante du procédé. Il est donc inutile d’avoir une aire interfaciale élevée et la colonne à bulle qui présente une rétention liquide importante est un bon procédé à utiliser. " 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 15, 166 | "metadata": {}, 167 | "outputs": [ 168 | { 169 | "name": "stdout", 170 | "output_type": "stream", 171 | "text": [ 172 | "Hatta= 0.194\n" 173 | ] 174 | } 175 | ], 176 | "source": [ 177 | "kR=0.15\n", 178 | "Ha=np.sqrt(kR*D/(k**2))\n", 179 | "print ('Hatta=',round(Ha,3))" 180 | ] 181 | }, 182 | { 183 | "cell_type": "markdown", 184 | "metadata": {}, 185 | "source": [ 186 | "**Comment pourrait être modifié le procédé si jamais un réactif réagissant 100 fois plus vite avec l’impureté était mis au point ?**\n", 187 | "\n" 188 | ] 189 | }, 190 | { 191 | "cell_type": "code", 192 | "execution_count": 16, 193 | "metadata": {}, 194 | "outputs": [ 195 | { 196 | "name": "stdout", 197 | "output_type": "stream", 198 | "text": [ 199 | "Hatta new= 1.937\n" 200 | ] 201 | } 202 | ], 203 | "source": [ 204 | "kR_new=kR*100.\n", 205 | "Ha_new=np.sqrt(kR_new*D/(k**2))\n", 206 | "print ('Hatta new=',round(Ha_new,3))" 207 | ] 208 | }, 209 | { 210 | "cell_type": "markdown", 211 | "metadata": {}, 212 | "source": [ 213 | ">Il serait alors judicieux de travailler avec une colonne à bulles agitée de façon à augmenter l’aire interfaciale.\n", 214 | "\n", 215 | "**Calculer la densité de flux de matière dans les deux cas en considérant que l’impureté est présente à une concentration de 10-3 mole/l. **" 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "execution_count": 32, 221 | "metadata": {}, 222 | "outputs": [ 223 | { 224 | "name": "stdout", 225 | "output_type": "stream", 226 | "text": [ 227 | "Ha: 0.194 le facteur d accélération est de 1 et le flux de matière de 7.74e-05 mol/m2s\n", 228 | "Ha: 1.937 le facteur d accélération est de 2.18 et le flux de matière de 1.69e-04 mol/m2s\n" 229 | ] 230 | } 231 | ], 232 | "source": [ 233 | "VL=1\n", 234 | "def EA(Ha):\n", 235 | " if Ha<0.3:\n", 236 | " phi_f=S*D/(k*VL)\n", 237 | " if Ha**23:\n", 242 | " EA=Ha\n", 243 | " else:\n", 244 | " EA=np.sqrt(1+Ha**2)\n", 245 | " return EA\n", 246 | "\n", 247 | "\n", 248 | "ci=1 #mol/m3\n", 249 | "N=EA(Ha)*k*ci\n", 250 | "N_new=EA(Ha_new)*k*ci\n", 251 | "\n", 252 | "print ('Ha:', round(Ha,3),'le facteur d accélération est de', round(EA(Ha),3),'et le flux de matière de', \"%.2e\"%N, 'mol/m2s')\n", 253 | "print ('Ha:', round(Ha_new,3),'le facteur d accélération est de', round(EA(Ha_new),3),'et le flux de matière de', \"%.2e\"%N_new, 'mol/m2s')\n", 254 | " " 255 | ] 256 | }, 257 | { 258 | "cell_type": "markdown", 259 | "metadata": {}, 260 | "source": [ 261 | "**Déterminer ensuite le temps de séjour (et la hauteur de la colonne) nécessaire pour éliminer 50% de l’impuretés. Commenter les résultats.**\n", 262 | "\n", 263 | ">Le temps de séjour nécessaire à l’élimination peut se déterminer en effectuant un bilan sur la bulle. On considère que l'élimination de l'impuretés dans la bulle est due au flux de matière sortant de la phase gaz et arrivant dans la phase liquide. \n", 264 | ">\n", 265 | ">Accumulation = 0 - Flux sortant\n", 266 | "$$dn=-N.S.dt $$\n", 267 | "où dn est la variation de nombre de mole dans la bulle. Si l'impureté est diluée dans la phase gaz, l'élimination de l'impuretés ne changera pas le volume de la bulle, $dV=0$. La variation du nombre de mole s'écrit alors $dn=Vdc+cdV=Vdc$. L'équation de continuité conduit à l'équation différentielle suivante pour la concentration dans la bulle :\n", 268 | "$$V\\frac{dc}{dt}=-NS=-E_A k c S$$\n", 269 | ">La résolution de l'équation conduit à une variation de la concentration en exponentielle décroissante du temps :\n", 270 | "$$c=Ke^{-E_A a k t }$$\n", 271 | "En appliquant la condition initiale, $t=0\\quad c=c_0$, on peut écrire :\n", 272 | "$$\\frac{c}{c_0}=e^{-E_A a k t }$$\n", 273 | ">\n", 274 | ">le temps nécessaire à une réduction de 50% de la concentration de l’impureté est :\n", 275 | ">$$t=-\\frac{ln(0.5)}{E_A a k}$$\n", 276 | "\t \n", 277 | "\n" 278 | ] 279 | }, 280 | { 281 | "cell_type": "code", 282 | "execution_count": 31, 283 | "metadata": {}, 284 | "outputs": [ 285 | { 286 | "name": "stdout", 287 | "output_type": "stream", 288 | "text": [ 289 | "7.74324321976099e-05\n", 290 | "3000.0\n", 291 | "1\n", 292 | "Ha: 0.194 le temps est de 2.984 s et la hauteur de la colonne de 0.714 m\n", 293 | "Ha: 1.937 le temps est de 1.369 s et la hauteur de la colonne de 0.328 m\n" 294 | ] 295 | } 296 | ], 297 | "source": [ 298 | "print (k)\n", 299 | "print (a)\n", 300 | "print (EA(Ha))\n", 301 | "t=-np.log(0.5)/(EA(Ha)*a*k)\n", 302 | "t_new=-np.log(0.5)/(EA(Ha_new)*a*k)\n", 303 | "H=u*t\n", 304 | "H_new=u*t_new\n", 305 | "\n", 306 | "print ('Ha:', round(Ha,3),'le temps est de', round(t,3),'s et la hauteur de la colonne de', round(H,3),'m')\n", 307 | "print ('Ha:', round(Ha_new,3),'le temps est de', round(t_new,3),'s et la hauteur de la colonne de', round(H_new,3),'m')\n" 308 | ] 309 | }, 310 | { 311 | "cell_type": "markdown", 312 | "metadata": {}, 313 | "source": [ 314 | "Pour en savoir plus https://onlinelibrary.wiley.com/doi/book/10.1002/0471725137https://www.lavoisier.fr/livre/industries-chimiques/genie-de-la-reaction-chimique-2e-ed/villermaux/descriptif-9782852067592 disponible à la BU en plusieurs exemplaires\n", 315 | "\n", 316 | "Questions auxquelles vous devez être capable de répondre :\n", 317 | "- Est-ce que la résistance peut être localisée du côté gaz ?\n", 318 | "- Est-ce que les bulles sont vraiment sphériques ?" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": null, 324 | "metadata": { 325 | "scrolled": true 326 | }, 327 | "outputs": [], 328 | "source": [] 329 | }, 330 | { 331 | "cell_type": "code", 332 | "execution_count": null, 333 | "metadata": {}, 334 | "outputs": [], 335 | "source": [] 336 | } 337 | ], 338 | "metadata": { 339 | "kernelspec": { 340 | "display_name": "Python 3", 341 | "language": "python", 342 | "name": "python3" 343 | }, 344 | "language_info": { 345 | "codemirror_mode": { 346 | "name": "ipython", 347 | "version": 3 348 | }, 349 | "file_extension": ".py", 350 | "mimetype": "text/x-python", 351 | "name": "python", 352 | "nbconvert_exporter": "python", 353 | "pygments_lexer": "ipython3", 354 | "version": "3.7.3" 355 | } 356 | }, 357 | "nbformat": 4, 358 | "nbformat_minor": 2 359 | } 360 | -------------------------------------------------------------------------------- /M2_IngBioMed_TD1_Estimation_surface_glomérulaire.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "66321ee9", 6 | "metadata": {}, 7 | "source": [ 8 | "# Estimation de la surface glomérulaire\n", 9 | "\n", 10 | "\n", 11 | "Utiliser la permeabilité d’une membrane d’ultrafiltation artificielle (cf TI2789 et 2790*) et des données de pression pour calculer la vitesse de filtration glomulaire\n", 12 | "\n", 13 | "En déduire la surface glomérulaire de filtration qui serait nécessaire pour avoir un DFG de 90 mL/(min*1,73 m2)\n", 14 | "\n", 15 | "Comparer à la valeur estimée pour les reins\n", 16 | "\n", 17 | "Conclure\n", 18 | "\n", 19 | "\n", 20 | "*D'après TI 2789 et 2790 la perméabilité d'une membrane d'ultrafiltration est comprise entre 1,4 e-12 et 1,4 e-13 m." 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 3, 26 | "id": "2db2f30b", 27 | "metadata": { 28 | "scrolled": true 29 | }, 30 | "outputs": [ 31 | { 32 | "name": "stdout", 33 | "output_type": "stream", 34 | "text": [ 35 | "La vitesse de fitration glomérulaire est comprise entre: [6.39947376e-06 6.39947376e-07] m/s\n", 36 | "1.4999999999999998e-06\n", 37 | "La surface de fitration glomérulaire est comprise entre : [0.23439427 2.34394273] m2\n" 38 | ] 39 | } 40 | ], 41 | "source": [ 42 | "import numpy as np\n", 43 | "A= np.array([1.4e-12,1.4e-13])\n", 44 | "#Pression dans le capillaire glomulaire\n", 45 | "Pc=60*133.32237 #60 mmHg\n", 46 | "#Pression intra-tubulaire\n", 47 | "Pt=15*133.32237 #15 mmHg\n", 48 | "#Contre pression osmotique\n", 49 | "Posm=21*133.32237 #21 mmHg\n", 50 | "mu=0.0007 #Pa.s\n", 51 | "Peff=Pc-Pt-Posm\n", 52 | "J=A*Peff/mu\n", 53 | "\n", 54 | "print ('La vitesse de fitration glomérulaire est comprise entre:', J, ' m/s')\n", 55 | "\n", 56 | "DFG=90*1e-6/60 #m3/s\n", 57 | "print (DFG)\n", 58 | "S=DFG/J\n", 59 | "print ('La surface de fitration glomérulaire est comprise entre :', S, ' m2')" 60 | ] 61 | }, 62 | { 63 | "attachments": {}, 64 | "cell_type": "markdown", 65 | "id": "46ea46e6", 66 | "metadata": {}, 67 | "source": [ 68 | "Avec les calculs basés sur la perméabilité d'une membrane articielle d'ultrafiltration, il faudrait une surface de rein de l'ordre du m2. La surface réelle d'un rein est de 5 à 15 m2 pour 100 gr de rein soit environ 15 à 45 m2 pour deux reins de 150 g. Le rein naturel a une surface plus grande celle calculée ce qui peut permettre de faire face à des coups durs comme des calculs ! \n", 69 | "\n", 70 | "Nous verrons également que les membranes les plus proches du rein naturel ont un seuil de coupure faible et des perméabilités de l'ordre de 0,1 mL h-1m2Pa-1 soit 10 L h-1m2Bar-1 et sont donc plutôt dans la gamme nanofiltration du tableau dans les Techniques de l'ingénieur. Un calcul avec cette valeur de perméabilité conduit à une surface de 12 m2 beaucoup plus proche des valeurs réelles.\n" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": null, 76 | "id": "ceda9a85", 77 | "metadata": {}, 78 | "outputs": [], 79 | "source": [] 80 | } 81 | ], 82 | "metadata": { 83 | "kernelspec": { 84 | "display_name": "Python 3 (ipykernel)", 85 | "language": "python", 86 | "name": "python3" 87 | }, 88 | "language_info": { 89 | "codemirror_mode": { 90 | "name": "ipython", 91 | "version": 3 92 | }, 93 | "file_extension": ".py", 94 | "mimetype": "text/x-python", 95 | "name": "python", 96 | "nbconvert_exporter": "python", 97 | "pygments_lexer": "ipython3", 98 | "version": "3.9.12" 99 | } 100 | }, 101 | "nbformat": 4, 102 | "nbformat_minor": 5 103 | } 104 | -------------------------------------------------------------------------------- /M2_IngBioMed_TD2_Diagnostic_insuffisance_renale.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "9c3642d7", 6 | "metadata": {}, 7 | "source": [ 8 | "# Diagnostic clairance et DFG\n", 9 | "\n", 10 | "Analyse du patient :\n", 11 | "- Créatininémie : 18 mg/L de plasma\n", 12 | "- Créatininurie : 1,5 g/L d’urine \n", 13 | "- Volume urinaire sur 24 heures : 1,6 L\n", 14 | "\n", 15 | "Pour ces analyses, calculer la clairance, la DFG et l’estimation de la DFG par la seule mesure de la créatininémie. Conclure." 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 2, 21 | "id": "b9f63c32", 22 | "metadata": {}, 23 | "outputs": [ 24 | { 25 | "name": "stdout", 26 | "output_type": "stream", 27 | "text": [ 28 | "La clairance est de : 37.03703703703704 mL/min\n", 29 | "1.6253865741715157\n", 30 | "Le débit de filtration glomulaire est de : 39.42082154009031 mL/(min*1,73m2\n", 31 | "159.1230551626591\n", 32 | "43.3875\n", 33 | "UV analysé 8.486562942008486 mmol/jour\n", 34 | "UV attendu 8.6775 mmol/jour\n", 35 | "DFG_Cockcroft est de : 39.592000000000006 mL/(min*1,73m2)\n", 36 | "DFG_MDRD est de : 31.201196208972213 mL/(min*1,73m2)\n", 37 | "DFG_CKD est de : 34.64122124846187 mL/(min*1,73m2)\n" 38 | ] 39 | } 40 | ], 41 | "source": [ 42 | "import numpy as np\n", 43 | "creatininémie=18 #mg/L de plasma\n", 44 | "creatininurie=1.2 #g/L d urine\n", 45 | "volume_urinaire_en_24h=0.8 #L\n", 46 | "\n", 47 | "clairance=creatininurie*volume_urinaire_en_24h*1000*1000/(creatininémie*1440)\n", 48 | "print ('La clairance est de :', clairance, ' mL/min')\n", 49 | "\n", 50 | "taille=160 #cm\n", 51 | "poids=60 #kg\n", 52 | "SC = 0.007184*taille**0.725*poids**0.4255\n", 53 | "\n", 54 | "print(SC)\n", 55 | "\n", 56 | "DFG= clairance*1.73/SC\n", 57 | "print ('Le débit de filtration glomulaire est de :', DFG, ' mL/(min*1,73m2')\n", 58 | "\n", 59 | "#methode simlifiée CKD-EPI\n", 60 | "M=113.12 #g/mol\n", 61 | "creat=creatininémie*1000/M #microM\n", 62 | "print(creat)\n", 63 | "femme=1\n", 64 | "age=40 #année\n", 65 | "poids=60 #kg\n", 66 | "\n", 67 | "massemaigre=1.07*poids-148*poids*poids/(taille*taille)\n", 68 | "\n", 69 | "print(massemaigre)\n", 70 | "\n", 71 | "print ('UV analysé',creatininurie*volume_urinaire_en_24h*1000/M, 'mmol/jour')\n", 72 | "print ('UV attendu',massemaigre*0.2, 'mmol/jour')\n", 73 | "\n", 74 | "fcock=np.where(femme==1,0.84,1)\n", 75 | "fmdrd=np.where(femme==1,0.742,1)\n", 76 | "k=np.where(femme==1,0.7,0.9)\n", 77 | "alpha=np.where(femme==1,-0.329,-0.411)\n", 78 | "comp=np.where(femme==1,1.018,1)\n", 79 | "\n", 80 | "DFG_cockcroft=1.25*poids*(140-age)*fcock/creat\n", 81 | "DFG_MDRD=175*(creat*0.0113)**-1.154*age**-0.203*fmdrd\n", 82 | "DFG_CKD=141*(np.min([creat*0.0113/k,1])**alpha)*(np.max([creat*0.0113/k,1])**-1.209)*(0.993**age)*comp\n", 83 | "\n", 84 | "print ('DFG_Cockcroft est de :', DFG_cockcroft, ' mL/(min*1,73m2)')\n", 85 | "print ('DFG_MDRD est de :', DFG_MDRD, ' mL/(min*1,73m2)')\n", 86 | "print ('DFG_CKD est de :', DFG_CKD, ' mL/(min*1,73m2)')\n" 87 | ] 88 | } 89 | ], 90 | "metadata": { 91 | "kernelspec": { 92 | "display_name": "Python 3 (ipykernel)", 93 | "language": "python", 94 | "name": "python3" 95 | }, 96 | "language_info": { 97 | "codemirror_mode": { 98 | "name": "ipython", 99 | "version": 3 100 | }, 101 | "file_extension": ".py", 102 | "mimetype": "text/x-python", 103 | "name": "python", 104 | "nbconvert_exporter": "python", 105 | "pygments_lexer": "ipython3", 106 | "version": "3.9.12" 107 | } 108 | }, 109 | "nbformat": 4, 110 | "nbformat_minor": 5 111 | } 112 | -------------------------------------------------------------------------------- /M2_IngBioMed_TD3_Estimation_temps_dialyse.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "0f275950", 6 | "metadata": {}, 7 | "source": [ 8 | "# Estimation du temps de dialyse et du volume de dialysat\n", 9 | "\n", 10 | "Sur un fonctionnement à une passe, pour un débit de sang de 300 mL/min, un rein artificiel permet de réduire la concentration en urée de 4g/L à 1,1 g/L.\n", 11 | "\n", 12 | "Calculer la clairance\n", 13 | "\n", 14 | "Un patient de 80 kg arrive avec une teneur en urée de 3 g/L. La dialyse doit lui permettre de repartir avec une concentration en urée de 0,8 g/L.\n", 15 | "\n", 16 | "Calculer la masse d’urée à éliminer\n", 17 | "Calculer le temps de dialyse nécessaire\n" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "id": "8bc7095f", 24 | "metadata": {}, 25 | "outputs": [ 26 | { 27 | "name": "stdout", 28 | "output_type": "stream", 29 | "text": [ 30 | "3.6249999999999996e-06 m3/s\n", 31 | "La clairance peut être estimée à 217.49999999999997 ml/min\n", 32 | "La masse en urée à éliminer est : 0.10207999999999999 kg\n", 33 | "1.664452642047285\n", 34 | "16918.474751773687\n", 35 | "Le temps de dialyse estimé est : 4.699576319937135 h\n" 36 | ] 37 | }, 38 | { 39 | "data": { 40 | "image/png": "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\n", 41 | "text/plain": [ 42 | "
    " 43 | ] 44 | }, 45 | "metadata": { 46 | "needs_background": "light" 47 | }, 48 | "output_type": "display_data" 49 | } 50 | ], 51 | "source": [ 52 | "import numpy as np\n", 53 | "import matplotlib.pyplot as plt\n", 54 | "Qc=300*1e-6/60\n", 55 | "Cse=4 \n", 56 | "Css=1.1\n", 57 | "\n", 58 | "K=Qc*(Cse-Css)/Cse\n", 59 | "print(K, 'm3/s')\n", 60 | "print('La clairance peut être estimée à', K*1e+6*60, 'ml/min')\n", 61 | "\n", 62 | "C0=3\n", 63 | "Cf=0.8\n", 64 | "P=80\n", 65 | "ECTF=0.58*P*0.001\n", 66 | "VDPoids=0\n", 67 | "M=C0*(ECTF+VDPoids)-Cf*ECTF\n", 68 | "print ('La masse en urée à éliminer est :', M, 'kg')\n", 69 | "cmoy=(Cf-C0)/np.log(Cf/C0)\n", 70 | "print (cmoy)\n", 71 | "td=M/(K*cmoy)\n", 72 | "print (td)\n", 73 | "print ('Le temps de dialyse estimé est :', td/3600, 'h')\n", 74 | "t=np.linspace(0,5,100)\n", 75 | "plt.plot(t,C0*np.exp(-K*t*3600/ECTF))\n", 76 | "plt.plot([0,td/3600],[Cf,Cf],'r--')\n", 77 | "plt.plot([td/3600,td/3600],[0,Cf],'r--')\n", 78 | "plt.xlabel('t (h)')\n", 79 | "plt.ylabel('c en urée (g/L)')\n", 80 | "plt.ylim(0,C0)\n", 81 | "plt.show()" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": null, 87 | "id": "94e3111e", 88 | "metadata": {}, 89 | "outputs": [], 90 | "source": [] 91 | } 92 | ], 93 | "metadata": { 94 | "kernelspec": { 95 | "display_name": "Python 3 (ipykernel)", 96 | "language": "python", 97 | "name": "python3" 98 | }, 99 | "language_info": { 100 | "codemirror_mode": { 101 | "name": "ipython", 102 | "version": 3 103 | }, 104 | "file_extension": ".py", 105 | "mimetype": "text/x-python", 106 | "name": "python", 107 | "nbconvert_exporter": "python", 108 | "pygments_lexer": "ipython3", 109 | "version": "3.9.12" 110 | } 111 | }, 112 | "nbformat": 4, 113 | "nbformat_minor": 5 114 | } 115 | -------------------------------------------------------------------------------- /M2_IngBioMed_TD4_Efficacite_mixed_matrice_membrane.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "attachments": {}, 5 | "cell_type": "markdown", 6 | "id": "0f275950", 7 | "metadata": {}, 8 | "source": [ 9 | "# Efficacité d'une Mixed Matrice Membrane MMM pour la dialyse\n", 10 | "\n", 11 | "### Etude du transfert en diffusion pure\n", 12 | "En considérant le seul transfert par diffusion à travers la membrane, exprimer puis calculer la densité de flux et le flux (en g/h) de diffusion d’urée et de créatine pour une dans le sang de 3g/L et de 100 mg/L en urée et en toxine\n", 13 | "\n", 14 | "### Etude du transfert en régime diffusion + adsorption\n", 15 | "Une membrane MMM contient des adsorbants. Ces adsorbants, dispersés finement dans la membrane, représentent une surface d’adsorption caractérisée par une surface spécifique, a, représentant la surface active par unité de volume de la membrane. L’adsorption peut être décrite par une réaction hétérogène d’ordre 1.\n", 16 | "\n", 17 | "Calculer le flux de matière de toxine en kg/(m2s) et en g/h qui sera extrait du compartiment sang. Chiffrer le gain par rapport à une membrane opérant par diffusion seule (voir diapo précédente).\n", 18 | "\n", 19 | "Calculer la concentration en toxine présente à la moitié de l’épaisseur de la membrane. \n", 20 | "\n", 21 | "Conclure sur l’intérêt d’intégrer les adsorbants sur toute l’épaisseur de la membrane. \n", 22 | "\n", 23 | "\n", 24 | "### Données :\n", 25 | "- Surface du rein artificiel 0,6 m2\n", 26 | "- Coefficient de diffusion de l’urée dans la membrane (classique ou MMM) : Du=4 10-11 m2 /s \n", 27 | "- Coefficient de diffusion de la toxine dans la membrane (classique ou MMM) : Dt=2 10-12 m2 /s \n", 28 | "- Epaisseur de la membrane de dialyse : e=50 micromètres \n", 29 | "- Surface spécifique des adsorbants dans la MMM : a=10 m2 /m3 \n", 30 | "- Constante de vitesse de la réaction d’adsorption assimilée à une réaction hétérogène d’ordre 1 : k*R=0,01 m/s \n", 31 | "\n" 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": 34, 37 | "id": "8bc7095f", 38 | "metadata": {}, 39 | "outputs": [ 40 | { 41 | "name": "stdout", 42 | "output_type": "stream", 43 | "text": [ 44 | "La densité de flux de matière d urée est de 2.400000e-06 kg m-2 s-1\n", 45 | "La densité de flux de matière de toxine est de 4.000000e-09 kg m-2 s-1\n", 46 | "Le flux de matière d urée est de 5.184000 g/h\n", 47 | "Le flux de matière de toxine est de 0.008640 g/h\n" 48 | ] 49 | } 50 | ], 51 | "source": [ 52 | "import numpy as np\n", 53 | "import matplotlib.pyplot as plt\n", 54 | "\n", 55 | "# Données opératoires\n", 56 | "cu=3 #g/L ou kg/m3\n", 57 | "ct=0.1 #g/L ou kg/m3\n", 58 | "# Données membrane\n", 59 | "Du=4e-11 #m2s-1\n", 60 | "Dt=2e-12 #m2s-1\n", 61 | "e=50e-6 #m\n", 62 | "S=0.6 #m2\n", 63 | "\n", 64 | "#Calcul des densité de flux (hypothèse concentration nulle dans le dialysat : \n", 65 | "# le débit de dialysat doit être suffisant)\n", 66 | "ju=(Du/e)*cu\n", 67 | "jt=(Dt/e)*ct\n", 68 | "print ('La densité de flux de matière d urée est de {0:e}'.format(ju),' kg m-2 s-1')\n", 69 | "print ('La densité de flux de matière de toxine est de {0:e}'.format(jt),' kg m-2 s-1')\n", 70 | "\n", 71 | "#Calcul des flux en g/h\n", 72 | "Ju=ju*S*1000*3600\n", 73 | "Jt=jt*S*1000*3600\n", 74 | "print ('Le flux de matière d urée est de {0:f}'.format(Ju),' g/h')\n", 75 | "print ('Le flux de matière de toxine est de {0:f}'.format(Jt),' g/h')" 76 | ] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "id": "1b923399", 81 | "metadata": {}, 82 | "source": [ 83 | "# Etude du transfert en régime diffusion + adsorption\n", 84 | "\n", 85 | "Lors de la dialyse à travers une Mixed Matrice Membrane il y a un transport diffusif des espèces mais également une réaction d'adorption. Le profil de concentration n'est donc plus linéaire comme en diffusion pure. Pour déterminer le profil de concentration, il est nécessaire de résoudre l'équation de continuité dans un élément de volume dans la membrane :\n", 86 | "\n", 87 | "$\\frac{\\partial c}{\\partial t}=- \\mathbf{\\nabla} \\cdot \\mathbf{j} \\pm s$\n", 88 | "\n", 89 | "Pour les hypothèses suivantes :\n", 90 | "- régime permanent\n", 91 | "- coordonnée rectigne dans une direction x\n", 92 | "- terme source $s=a k^*_R c$\n", 93 | "- flux de matière diffusif $j=-D \\nabla c=-D \\frac{\\partial c}{\\partial x}$\n", 94 | "\n", 95 | "Il faut résoudre l'équation différentielle :\n", 96 | "\n", 97 | "$D\\frac{\\partial^2 c}{\\partial x^2} -a k^*_R c=0$\n", 98 | "\n", 99 | "Avec les conditions limites :\n", 100 | "\n", 101 | "$x=0$ $c=c_b$\n", 102 | "\n", 103 | "$x=e$ $c=c_d=0$\n", 104 | "\n", 105 | "La solution générale de cette équation est :\n", 106 | "\n", 107 | "$c=K_1 ch{\\varphi\\frac{x}{e}} + K_22 ch{\\varphi\\frac{x}{e}}$\n", 108 | "\n", 109 | "en définissant un nombre sans dimension appelé [nombre de Thiele](https://fr.wikipedia.org/wiki/Nombre_de_Thiele) :\n", 110 | "\n", 111 | "$\\varphi=\\sqrt{\\frac{ak_R^\\ast}{D}}e $\n", 112 | "\n", 113 | "Les conditions limites permettent de déterminer les constantes :\n", 114 | "\n", 115 | "$c_b=K_1$\n", 116 | "\n", 117 | "$0=K_1 ch\\left(\\varphi\\right)+K_2 sh\\left(\\varphi\\right)$\n", 118 | "\n", 119 | "$K_2=-\\frac{c_b}{th(\\varphi)}$\n", 120 | "\n", 121 | "Le profil de concentration s'écrit alors :\n", 122 | "\n", 123 | "$\\frac{c}{c_b}=ch{\\left(\\varphi\\frac{x}{e}\\right)}-\\frac{sh(\\varphi\\frac{x}{e})}{th(\\varphi)}$\n", 124 | "\n", 125 | "Ce profil permet de déduire les flux de matière côté sang et dialysat :\n", 126 | "\n", 127 | "$\\left.\\ j\\right|_{x=0}=\\frac{D}{e}\\frac{\\varphi}{th(\\varphi)}c_b$\n", 128 | "\n", 129 | "$\\left.\\ j\\right|_{x=e}=\\frac{D}{e}\\frac{\\varphi}{sh(\\varphi)}c_b$\n" 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 36, 135 | "id": "4804d711", 136 | "metadata": {}, 137 | "outputs": [ 138 | { 139 | "name": "stdout", 140 | "output_type": "stream", 141 | "text": [ 142 | "Le nombre de Thiele est de 11.180340\n", 143 | "Puisque le nombre est très supérieur à 1 le régime est limité par la diffusion\n", 144 | "Le flux de matière est multiplié par 11.180340 par rapport à un flux purement diffusif\n", 145 | "Le flux de matière entrant dans la membrane (et donc enlevé deu sang) est de 96.598137 mg/h\n", 146 | "Le flux de matière sortant de la membrane (arrivant dans le dialysat) est de 0.002694 mg/h\n" 147 | ] 148 | }, 149 | { 150 | "data": { 151 | "image/png": "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\n", 152 | "text/plain": [ 153 | "
    " 154 | ] 155 | }, 156 | "metadata": { 157 | "needs_background": "light" 158 | }, 159 | "output_type": "display_data" 160 | }, 161 | { 162 | "name": "stdout", 163 | "output_type": "stream", 164 | "text": [ 165 | "c/cb à mi-membrane est 0.003734\n" 166 | ] 167 | } 168 | ], 169 | "source": [ 170 | "#Calcul du module de Thiele\n", 171 | "\n", 172 | "#Données charbon actif\n", 173 | "a=10 #m2 m-3\n", 174 | "kR=0.01 #m s-1\n", 175 | "\n", 176 | "Phi=np.sqrt(a*kR/Dt)*e\n", 177 | "print ('Le nombre de Thiele est de {0:f}'.format(Phi))\n", 178 | "print ('Puisque le nombre est très supérieur à 1 le régime est limité par la diffusion')\n", 179 | "\n", 180 | "print ('Le flux de matière est multiplié par {0:f} par rapport à un flux purement diffusif'.format(Phi/np.tanh(Phi)))\n", 181 | "\n", 182 | "#Calcul des flux en mg/h\n", 183 | "Je=S*(Dt/e)*(Phi/np.tanh(Phi))*ct*1000*3600*1000\n", 184 | "Js=S*(Dt/e)*(Phi/np.sinh(Phi))*ct*1000*3600*1000\n", 185 | "print ('Le flux de matière entrant dans la membrane (et donc enlevé deu sang) est de {0:f} mg/h'.format(Je))\n", 186 | "print ('Le flux de matière sortant de la membrane (arrivant dans le dialysat) est de {0:f} mg/h'.format(Js))\n", 187 | "\n", 188 | "x=np.linspace(0,e,100)\n", 189 | "#Calcul du rapport c/cb\n", 190 | "c=np.cosh(Phi*x/e)-np.sinh(Phi*x/e)/np.tanh(Phi)\n", 191 | "\n", 192 | "plt.plot(x,c)\n", 193 | "plt.xlabel('Profondeur dans la membrane (m)')\n", 194 | "plt.ylabel('c/cb (-)')\n", 195 | "plt.show()\n", 196 | "\n", 197 | "#Calcul de la concentration à mi épaisseur\n", 198 | "c2=np.cosh(Phi/2)-np.sinh(Phi/2)/np.tanh(Phi)\n", 199 | "print ('c/cb à mi-membrane est {0:f}'.format(c2))\n" 200 | ] 201 | }, 202 | { 203 | "cell_type": "markdown", 204 | "id": "d0ca527a", 205 | "metadata": {}, 206 | "source": [ 207 | "La quantité d'absorbant permet de réduire de façon importante la teneur en toxine. Il pourrait être possible de réduire la teneur en absorbant. " 208 | ] 209 | }, 210 | { 211 | "cell_type": "code", 212 | "execution_count": null, 213 | "id": "90ce0be6", 214 | "metadata": {}, 215 | "outputs": [], 216 | "source": [] 217 | } 218 | ], 219 | "metadata": { 220 | "kernelspec": { 221 | "display_name": "Python 3 (ipykernel)", 222 | "language": "python", 223 | "name": "python3" 224 | }, 225 | "language_info": { 226 | "codemirror_mode": { 227 | "name": "ipython", 228 | "version": 3 229 | }, 230 | "file_extension": ".py", 231 | "mimetype": "text/x-python", 232 | "name": "python", 233 | "nbconvert_exporter": "python", 234 | "pygments_lexer": "ipython3", 235 | "version": "3.9.12" 236 | } 237 | }, 238 | "nbformat": 4, 239 | "nbformat_minor": 5 240 | } 241 | -------------------------------------------------------------------------------- /M2_metallisation_exam.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Métallisation de plastiques par colloïdes à base de palladium\n", 8 | "\n", 9 | "La métallisation de plastique peut-être réalisée de façon industrielle après adhésion sur le plastique de colloïdes à base de palladium (procédé FUTURON ). Cette étude consiste à étudier la stabilité des particules en suspension puis estimer la faculté à l’adhésion de ces particules sur une plaque de plastique. \n", 10 | "\n" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 2, 16 | "metadata": {}, 17 | "outputs": [], 18 | "source": [ 19 | "import numpy as np\n", 20 | "import matplotlib.pyplot as plt\n", 21 | "\n", 22 | "#CONSTANTES\n", 23 | "\n", 24 | "#Nombre d'Avogadro\n", 25 | "avo=6.02214076e23\n", 26 | "\n", 27 | "#Constante de Boltzmann\n", 28 | "k=1.38064852e-23 #m2 kg s-2 K-1 ou J/K\n", 29 | "T=298.13\n", 30 | "kT=k*T #énergie thermique par molécule\n", 31 | "RGP=k*avo\n", 32 | "\n", 33 | "#Charge de l'électron\n", 34 | "e=1.602e-19\n", 35 | "F=e*avo\n", 36 | "\n", 37 | "#Permittivité électrique de l'eau\n", 38 | "eps=8.85418782e-12*78.5 #m-3 kg-1 s4 A2\n", 39 | "\n", 40 | "#Viscosité (dynamique) de l'eau à 20°C\n", 41 | "mu=1e-3 #Pa.s" 42 | ] 43 | }, 44 | { 45 | "cell_type": "markdown", 46 | "metadata": {}, 47 | "source": [ 48 | "$$Log_{10}(W)=-2.06 10^{+9} \\frac{a\\Upsilon^2}{z^2}Log_{10}c+b$$\n", 49 | "\n", 50 | "Si la ccc est connu on peut déterminer b (puisque la ccc correspond à une stabilité de 1) :\n", 51 | "\n", 52 | "$$b=2.06 10^{+9} \\frac{a\\Upsilon^2}{z^2}Log_{10}ccc$$\n", 53 | "\n" 54 | ] 55 | }, 56 | { 57 | "cell_type": "markdown", 58 | "metadata": {}, 59 | "source": [ 60 | "3)\tCalculer la valeur du paramètre b " 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": 10, 66 | "metadata": {}, 67 | "outputs": [ 68 | { 69 | "name": "stdout", 70 | "output_type": "stream", 71 | "text": [ 72 | "-1.2594435785440277\n", 73 | "b= -1.2594435785440277\n" 74 | ] 75 | } 76 | ], 77 | "source": [ 78 | "zeta_c=-0.05 #V\n", 79 | "z=1\n", 80 | "a=3e-9\n", 81 | "ccc=0.1\n", 82 | "upsilon=np.tanh(z*e*zeta_c/(4*kT))\n", 83 | "pente=-2.06e+9*a*upsilon**2/(z**2)\n", 84 | "b=np.log10(ccc)*(-pente)\n", 85 | "print (pente)\n", 86 | "print ('b=',b)\n", 87 | "\n" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 27, 93 | "metadata": {}, 94 | "outputs": [ 95 | { 96 | "name": "stdout", 97 | "output_type": "stream", 98 | "text": [ 99 | "I=0.05 M V/kT @h=1 nm 0.8946742225630204\n", 100 | "I=0.05 M Vmax/kT 0.9250214120196755\n", 101 | "I=0.01 M V/kT @h=1 nm 1.9520060102267032\n", 102 | "I=0.01 M Vmax/kT 1.960037850535986\n" 103 | ] 104 | }, 105 | { 106 | "data": { 107 | "image/png": "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\n", 108 | "text/plain": [ 109 | "
    " 110 | ] 111 | }, 112 | "metadata": { 113 | "needs_background": "light" 114 | }, 115 | "output_type": "display_data" 116 | } 117 | ], 118 | "source": [ 119 | "zeta_p=-0.015\n", 120 | "upsilon1=np.tanh(z*e*zeta_c/(4*kT))\n", 121 | "upsilon2=np.tanh(z*e*zeta_p/(4*kT))\n", 122 | "\n", 123 | "Hamaker=1e-20\n", 124 | "Ld=np.sqrt(eps*RGP*T/(2*F*F*I*1000))\n", 125 | "def V(h):\n", 126 | " V=4*np.pi*a*eps*((4*RGP*T/(F))**2)*upsilon1*upsilon2*np.exp(-h/Ld)-Hamaker*a/(6*h)\n", 127 | " return V\n", 128 | "h=np.linspace(1e-10,1e-8,100)\n", 129 | "\n", 130 | "I=0.05\n", 131 | "Ld=np.sqrt(eps*RGP*T/(2*F*F*I*1000))\n", 132 | "plt.plot(h,V(h)/kT)\n", 133 | "print ('I=0.05 M V/kT @h=1 nm', V(1e-9)/kT )\n", 134 | "print ('I=0.05 M Vmax/kT ', max(V(h)/kT))\n", 135 | "I=0.01\n", 136 | "Ld=np.sqrt(eps*RGP*T/(2*F*F*I*1000))\n", 137 | "plt.plot(h,V(h)/kT)\n", 138 | "print ('I=0.01 M V/kT @h=1 nm', V(1e-9)/kT )\n", 139 | "print ('I=0.01 M Vmax/kT ', max(V(h)/kT))\n", 140 | "plt.ylim(-1,)\n", 141 | "plt.xlabel('h (m)')\n", 142 | "plt.ylabel('V/kT')\n", 143 | "plt.show()" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": null, 149 | "metadata": {}, 150 | "outputs": [], 151 | "source": [] 152 | } 153 | ], 154 | "metadata": { 155 | "kernelspec": { 156 | "display_name": "Python 3", 157 | "language": "python", 158 | "name": "python3" 159 | }, 160 | "language_info": { 161 | "codemirror_mode": { 162 | "name": "ipython", 163 | "version": 3 164 | }, 165 | "file_extension": ".py", 166 | "mimetype": "text/x-python", 167 | "name": "python", 168 | "nbconvert_exporter": "python", 169 | "pygments_lexer": "ipython3", 170 | "version": "3.7.3" 171 | } 172 | }, 173 | "nbformat": 4, 174 | "nbformat_minor": 2 175 | } 176 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # chemical_engineering_python 2 | Python code for chemical engineering : master classes and research 3 | 4 | This page contains some code that are used in chemical engineering classes at University of Toulouse (France). The M1* file correspond to exercises that are treated in the first year of the Master in chemical engineering of Toulouse (Université Toulouse III). 5 | 6 | -M1_electrochimie code allows to calculate the oxydation rate of glucose at an electrode. It allows to treat the coupling between an heterogeneous reaction and the diffusion in a mass boundary layer and to use the Damkholer number. 7 | 8 | -M1_cristal code allows to calculate the growing rate of a cristal. It allows to treat the coupling between an heterogeneous reaction and the diffusion in a mass boundary layer and to use the Damkholer number for a second order reaction. 9 | 10 | -M1_catalyseur code allows to calculate the consomption of a reactant by a porous catalytic bead. It allow to treat the coupling between an heterogeneous reaction and the internal diffusion in the porous media and to use the Thiele modulus. 11 | 12 | -M1_ultrafiltration code allows to calculate the filtration rate for a given transmembrane pressure when the process is limited by a concentration polarization inducing a counter osmotic pressure. It allows to treat the coupling between the convection (due to the permeation) and the diffusion and to use the Péclet number. 13 | 14 | The EM3E* file corresponds to courses in Separation Science for the Erasmus Munuds Programme in Membrane Engineering. 15 | 16 | -EM3E_liquid_vapor_equilibrium for the plot of the dew point and bioling curve 17 | 18 | -EM3E_Liquid_liquid_equilibrium for the plot of the binodal and tie lines in a ternary diagram 19 | 20 | The M2* file corresponds to courses in Colloid and Interface Science. 21 | 22 | More info on wwww.patricebacchin.fr 23 | -------------------------------------------------------------------------------- /TP _L3_2_Diffusion.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# TP 2 : Mesure d'un coefficient de diffusion dans une cellule à diaphragme\n", 8 | "\n", 9 | "La cellule est composée de deux volumes $V_1=V_2=100\\,mL$ munis d'un agitateur pour s'assurer que la concentration dans chacun de ces volumes ($C_1$ et $C_2$ respectivement) est uniforme. Entre ces volumes se situe une membrane poreuse d'épaisseur $e = 2\\,mm$ et de diamètre $d = 4\\,cm$ dans laquelle un soluté peut diffuser. On supposera que le gradient de concentration est constant (profil linéaire de concentration) dans le milieu poreux, comme illustré sur le schéma.\n", 10 | "\n", 11 | "## 1 Préparation des solutions\n", 12 | "\n", 13 | "Préparez 250 mL d'une solution d'hexacyanoferrate de potassium à 0.1 mol/L : Quelle masse de solide faut-il ? (faites vérifier ce calcul par l'enseignant avant de continuer)\n", 14 | "\n", 15 | "Insérez le calcul ici\n", 16 | "\n", 17 | "Préparez les solutions du tableau suivant à partir de la solution mère pour les quatre premières et à partir de la solution à 10-4 mol/L pour les trois dernières. (Complétez le tableau et faites vérifier vos valeurs avant de continuer)\n", 18 | "\n", 19 | "Complétez le tableau suivant\n", 20 | "__________________________________________________________________________________________\n", 21 | "Concentration (M) | 1e-2 | 1e-3 | 5e-4 | 1e-4 | 5e-5 | 1e-5 | 1e-6 |\n", 22 | "__________________________________________________________________________________________\n", 23 | "Volume total (mL) | 50 | 50 | 50 | 100 | 50 | 50 | 50 |\n", 24 | "__________________________________________________________________________________________\n", 25 | "Volume à prélever \n", 26 | "(solution mère ou celle à 1e-4 M) | | | | | | | |\n", 27 | "__________________________________________________________________________________________\n", 28 | "\n", 29 | "\n", 30 | "## 2 Balayage du spectre d'absorption du soluté \n", 31 | "\n", 32 | "Commentez : quelle est l’incertitude sur la mesure due au spectrophotomètre ? \n", 33 | "\n", 34 | "Collez ici le graphe du spectre de la solution avec les pics et vallées identifiés. \n", 35 | "\"image\n", 36 | "\n", 37 | "Commentez : quel pic allez-vous choisir et pourquoi ? \n", 38 | "\n", 39 | "## Mesure du coefficient d'extinction molaire $\\epsilon_\\lambda$ à la longueur d'onde choisie\n", 40 | "\n", 41 | "Remplissez le tableau ci-dessous avec les concentrations et absorbances correspondantes \n", 42 | "\n", 43 | "____________________________________________________\n", 44 | "C (M) | | | | | | | | \n", 45 | "____________________________________________________\n", 46 | "A (AU)| | | | | | | | \n", 47 | "____________________________________________________\n", 48 | "\n", 49 | "\n", 50 | "Commentez : est-ce linéaire ? validité de la loi de Beer-Lambert ? est-ce que tous les points peuvent être utilisés pour calculer le coefficient d’extinction ?\n", 51 | "\n", 52 | "Utilisez la cellule ci-dessous pour mesurer le coefficient d'zextinction grâce à une régression linéaire. " 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 1, 58 | "metadata": {}, 59 | "outputs": [], 60 | "source": [ 61 | "from pylab import *\n", 62 | "C = array([1e-6, 1e-5, 5e-5, 1e-4, 5e-4, 1e-3, 1e-2])\n", 63 | "# Remplacer ici les NaN avec vos valeurs\n", 64 | "A = array([NaN,NaN,NaN,NaN,NaN,NaN,NaN])\n", 65 | "\n", 66 | "# Trace des valeurs. Est-ce lineaire ? \n", 67 | "plot(C, A, 'ob')\n", 68 | "xlabel('C (M)')\n", 69 | "ylabel('A (AU)')\n", 70 | "\n", 71 | "# Selection des premieres valeurs a adapter. Ici on enleve les 2 dernieres \n", 72 | "C = C[:-2] # a modifier\n", 73 | "A = A[:-2] # a modifier\n", 74 | "\n", 75 | "# Fit de la courbe A(C) avec un polynome de degre 1 (une droite donc). Les coeffs a et b qui sortent sont tels que A=aC+b \n", 76 | "a, b = polyfit(C,A,1)\n", 77 | "\n", 78 | "# Verification sur le graphique \n", 79 | "# ... a completer" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "\n", 87 | "## Mesure du coefficient de diffusion du soluté à travers la membrane\n", 88 | "\n", 89 | "Présentez ici succinctement le calcul de la solution théorique. \n", 90 | "\n", 91 | "Insérez ici la courbe permettant de faire une régression linéaire pour trouver le coefficient de diffusion. " 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": 4, 97 | "metadata": {}, 98 | "outputs": [], 99 | "source": [ 100 | "# Pour charger les donnees :\n", 101 | "# tmin, A = genfromtxt('TDRIV1.asc', unpack=True)\n", 102 | "\n", 103 | "# inspirez vous de la regression de la question precedente" 104 | ] 105 | }, 106 | { 107 | "cell_type": "markdown", 108 | "metadata": {}, 109 | "source": [ 110 | "Effectuez le calcul du coefficient de diffusion ici. " 111 | ] 112 | }, 113 | { 114 | "cell_type": "code", 115 | "execution_count": null, 116 | "metadata": {}, 117 | "outputs": [], 118 | "source": [] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "metadata": {}, 123 | "source": [ 124 | "Comparez ce coefficient à celui du soluté dans l'eau pure (hors d'un milieu poreux) qui vaut environ $10\\,10^{-10}\\,m^2/s$. omment expliquer la différence ? (deux raisons principales sont attendues)\n", 125 | "\n", 126 | "\n", 127 | "\n" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": null, 133 | "metadata": {}, 134 | "outputs": [], 135 | "source": [] 136 | } 137 | ], 138 | "metadata": { 139 | "kernelspec": { 140 | "display_name": "Python 3", 141 | "language": "python", 142 | "name": "python3" 143 | }, 144 | "language_info": { 145 | "codemirror_mode": { 146 | "name": "ipython", 147 | "version": 3 148 | }, 149 | "file_extension": ".py", 150 | "mimetype": "text/x-python", 151 | "name": "python", 152 | "nbconvert_exporter": "python", 153 | "pygments_lexer": "ipython3", 154 | "version": "3.7.7" 155 | } 156 | }, 157 | "nbformat": 4, 158 | "nbformat_minor": 2 159 | } 160 | -------------------------------------------------------------------------------- /TP _L3_6_MecaFlu.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# TP 6 : Mécanique des Fluides\n", 8 | "\n", 9 | "## Rappels\n", 10 | "\n", 11 | "Le théorème de Bernoulli : \n", 12 | "$$\\Delta P + \\Delta\\left(\\frac{1}{2}\\rho U^2\\right) + \\Delta(\\rho g z) = \\sum \\xi - \\frac{\\mathcal P}{Q}$$\n", 13 | "\n", 14 | "où $P$ est la pression, $\\rho$ la masse volumique, $U$ la vitesse moyenne, $g$ la gravité, $z$ l'altitude, $\\xi$ les pertes de pression dues aux frottements, $\\mathcal P$ la puissance hydraulique délivrée par une éventuelle pompe entre les points amont et aval des $\\Delta$, et $Q$ le débit volumique. Rappelez-vous que $\\Delta=$ \"amont moins aval\" et non \"final moins initial\". \n", 15 | "\n", 16 | "Les pertes de pression s'écrivent : \n", 17 | "$$\\xi = k_s\\frac{1}{2}\\rho U^2$$\n", 18 | "où $k_s$ est le coefficient de perte de charge. \n", 19 | "\n", 20 | "Pour les sections droites de tube de longueur $L$ et diamètre $d$, \n", 21 | "$$k_s=\\frac{\\lambda L}{d}$$\n", 22 | "avec $\\lambda$ le facteur de friction de Moody. En régime laminaire ($Re<2000$), $\\lambda=64/Re$; en régime turbulent ($Re>3000$), $\\lambda=0.316Re^{-1/4}$. \n", 23 | "\n", 24 | "Pour les singularités (coude, vanne, diaphragme, etc), les coefficients $k_s$ décroissent à bas $Re$ et sont censés devenir constants à grande $Re$. \n", 25 | "\n", 26 | "## Détermination du facteur de friction dans un tube ou une singularité \n", 27 | "\n", 28 | "### Tube Droit :\n", 29 | "\n", 30 | "Insérez le calcul permettant de trouver le coefficient de perte de charge à partie du théorème de Bernoulli ici. \n", 31 | "\n", 32 | "Insérez le graphe ci-dessous:" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": null, 38 | "metadata": {}, 39 | "outputs": [], 40 | "source": [ 41 | "from pylab import *\n", 42 | "# a remplaer:\n", 43 | "Q = array([20,30,40])\n", 44 | "dh = array([0.002,0.004,0.007])\n", 45 | "# a continuer" 46 | ] 47 | }, 48 | { 49 | "cell_type": "markdown", 50 | "metadata": {}, 51 | "source": [ 52 | "\n", 53 | "Insérez vos commentaires ici. \n", 54 | "\n", 55 | "\n", 56 | "\n", 57 | "### Tube avec 4 coudes :\n", 58 | "\n", 59 | "Insérez le calcul permettant de trouver le coefficient de perte de charge à partie du théorème de Bernoulli ici. \n", 60 | "\n", 61 | "Insérez un graphe du coefficient de friction en fonction de Re ici:" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": null, 67 | "metadata": {}, 68 | "outputs": [], 69 | "source": [] 70 | }, 71 | { 72 | "cell_type": "markdown", 73 | "metadata": {}, 74 | "source": [ 75 | "Commentez l’allure de la courbe et la valeur du coefficient à grand Re. \n", 76 | "\n", 77 | "\n", 78 | " \n", 79 | "### Vanne :\n", 80 | "\n", 81 | "Insérez le calcul permettant de trouver le coefficient de perte de charge à partie du théorème de Bernoulli ici. \n", 82 | "\n", 83 | "Insérez ici le tableau des valeurs du coefficient de perte de charge. \n", 84 | "\n", 85 | "Commentez ces valeurs (variations en fonction de Re et en fonction de la fermeture de la vanne). \n", 86 | "\n", 87 | "\n", 88 | "\n", 89 | "## Ecoulement dans un tube de Venturi \n", 90 | "\n", 91 | "Insérez le calcul permettant de trouver l’expression de la vitesse u2 ici (on néglige les pertes de charge). \n", 92 | "\n", 93 | "Insérez le calcul de C ici.\n", 94 | "\n", 95 | "Insérez le graphe de la courbe C en fonction du Re ici:\n" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": null, 101 | "metadata": {}, 102 | "outputs": [], 103 | "source": [] 104 | }, 105 | { 106 | "cell_type": "markdown", 107 | "metadata": {}, 108 | "source": [ 109 | "Commentez ici l’allure de cette courbe et les valeurs de C. \n", 110 | "\n", 111 | "Insérez le calcul du coefficient de perte de charge du Venturi ici. \n", 112 | "\n", 113 | "Insérez le graphe de la courbe du coefficient de perte de charge en fonction du Re ici :" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": null, 119 | "metadata": {}, 120 | "outputs": [], 121 | "source": [] 122 | } 123 | ], 124 | "metadata": { 125 | "kernelspec": { 126 | "display_name": "Python 3", 127 | "language": "python", 128 | "name": "python3" 129 | }, 130 | "language_info": { 131 | "codemirror_mode": { 132 | "name": "ipython", 133 | "version": 3 134 | }, 135 | "file_extension": ".py", 136 | "mimetype": "text/x-python", 137 | "name": "python", 138 | "nbconvert_exporter": "python", 139 | "pygments_lexer": "ipython3", 140 | "version": "3.7.7" 141 | } 142 | }, 143 | "nbformat": 4, 144 | "nbformat_minor": 2 145 | } 146 | -------------------------------------------------------------------------------- /TP _L3_7_Thermique.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "from pylab import *" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": {}, 15 | "source": [ 16 | "# Transferts de chaleur\n", 17 | "\n", 18 | "\n", 19 | "## Détermination de la conductivité thermique du cuivre \n", 20 | "\n", 21 | "Reportez ici le calcul permettant de trouver la conductivité $\\lambda_{Cu}$ en fonction des grandeurs mesurées expérimentallement. \n", 22 | "\n", 23 | "Insérez la courbe du profil de température ici, avec la régression. " 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": null, 29 | "metadata": {}, 30 | "outputs": [], 31 | "source": [ 32 | "# adaptez les valeurs ci-dessous (y compris les positions)\n", 33 | "x = array([0,6,12,18,24,30])\n", 34 | "theta = array([125,120,100,90,80,60])\n", 35 | "\n", 36 | "plot(x, theta, 'ob')\n", 37 | "\n", 38 | "# regression avec un polynome du premier degre = une droite ax+b. ATTENTION AUX UNITES\n", 39 | "a, b = polyfit(x,theta,1)\n", 40 | "\n", 41 | "# verification de la regression avec un trace... \n", 42 | "# plot(...) a completer" 43 | ] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "metadata": {}, 48 | "source": [ 49 | "Insérez vos commentaires sur la valeur de conductivité trouvée ici. \n", 50 | "\n", 51 | "## Détermination du coefficient d’échange thermique h \n", 52 | "\n", 53 | "Insérez ici le calcul du coefficient thermique h en fonction des grandeurs mesurées expérimentalement. \n", 54 | "\n", 55 | "Insérez ici le graphe représentant la variation du coefficient thermique h en fonction du nombre de Reynolds, pour chaque tube. " 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": null, 61 | "metadata": {}, 62 | "outputs": [], 63 | "source": [ 64 | "# tube 20cm \n", 65 | "Q = array([20,30,40]) # a completer\n", 66 | "theta_e_20 = array([16,16,16])\n", 67 | "theta_s_20 = array([18,17,16.5])\n", 68 | "#h_20 = ... a completer\n", 69 | "#Re = ...\n", 70 | "#plot(Re,h_20,'-r',label='Tube 20 cm')\n", 71 | "\n", 72 | "# tube 40cm\n", 73 | "#... \n", 74 | "\n", 75 | "# tube plus long \n", 76 | "#... " 77 | ] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": {}, 82 | "source": [ 83 | "Commentez ici le graphe ci-dessus. \n", 84 | "\n", 85 | "Insérez ici le graphe représentant la variation du Nusselt en fonction du nombre de Reynolds, pour chaque tube. (coordonnées log-log + régression)" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": null, 91 | "metadata": {}, 92 | "outputs": [], 93 | "source": [ 94 | "# Nu_20 = ... \n", 95 | "# logNu_20 = ...\n", 96 | "# logRe = ... \n", 97 | "# plot(logRe,logNu_20,'-r',label='Tube 20 cm')\n", 98 | "\n", 99 | "# Regression lineaire\n", 100 | "# ... a completer en s'inspirant de la premiere partie\n", 101 | "\n", 102 | "# idem pour les 2 autres tubes " 103 | ] 104 | }, 105 | { 106 | "cell_type": "markdown", 107 | "metadata": {}, 108 | "source": [ 109 | "Donnez les valeures de x et y dans un tableau ici. \n", 110 | "\n", 111 | "Tube | petit | moyen | grand | \n", 112 | "______________________________\n", 113 | "x | | | | \n", 114 | "______________________________\n", 115 | "y | | | | \n", 116 | "______________________________\n", 117 | "\n", 118 | "Commentez les valeurs de y (cf cours). \n", 119 | "\n", 120 | "Commenter l’influence du temps de séjour de l’eau dans le tube et du débit volumique sur la température de sortie du fluide ici. \n", 121 | "\n", 122 | "## Bilan Thermique Global \n", 123 | "\n", 124 | "Ecrivez le bilan thermique total sur le fluide contenu dans le circuit ici. Résolvez l’équation pour trouver la solution théorique de l’évolution de la température en fonction du temps. On rappelle qu'un bilan globa s'ecrit \n", 125 | "$$\\frac{d}{dt}\\left(m c_p T\\right)= J_{entrant}-J_{sortant}$$\n", 126 | "\n", 127 | "Insérez ici le graphe représentant l’évolution de la température en fonction du temps, avec les mesures expérimentales et les solutions théoriques pour chque débit (4 courbes sur la figure). " 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": 3, 133 | "metadata": {}, 134 | "outputs": [ 135 | { 136 | "data": { 137 | "text/plain": [ 138 | "[]" 139 | ] 140 | }, 141 | "execution_count": 3, 142 | "metadata": {}, 143 | "output_type": "execute_result" 144 | }, 145 | { 146 | "data": { 147 | "image/png": "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\n", 148 | "text/plain": [ 149 | "
    " 150 | ] 151 | }, 152 | "metadata": { 153 | "needs_background": "light" 154 | }, 155 | "output_type": "display_data" 156 | } 157 | ], 158 | "source": [ 159 | "t = arange(0,31,5) # attention aux unites\n", 160 | "Texp60 = array([15,16,17,18,19,20,21])\n", 161 | "\n", 162 | "plot(t,Texp60,'ob',label='Debit 60L/h')\n", 163 | "\n", 164 | "# a completer avec la theorie et avec le debit 120 L/h\n", 165 | "\n", 166 | "# Ttheo60 = ...\n", 167 | "#plot(t,Ttheo60...)\n", 168 | "\n", 169 | "# etc" 170 | ] 171 | }, 172 | { 173 | "cell_type": "markdown", 174 | "metadata": {}, 175 | "source": [ 176 | "Commentez le graphe (différence théorie/expérience, raisons, hypothèses, barres d’erreur). " 177 | ] 178 | } 179 | ], 180 | "metadata": { 181 | "kernelspec": { 182 | "display_name": "Python 3", 183 | "language": "python", 184 | "name": "python3" 185 | }, 186 | "language_info": { 187 | "codemirror_mode": { 188 | "name": "ipython", 189 | "version": 3 190 | }, 191 | "file_extension": ".py", 192 | "mimetype": "text/x-python", 193 | "name": "python", 194 | "nbconvert_exporter": "python", 195 | "pygments_lexer": "ipython3", 196 | "version": "3.7.2" 197 | } 198 | }, 199 | "nbformat": 4, 200 | "nbformat_minor": 2 201 | } 202 | -------------------------------------------------------------------------------- /UNIX/science.txt: -------------------------------------------------------------------------------- 1 | Ceci est la premiere ligne du fichier science. 2 | Voici des donnees aussi dans le fichier : 3 | 0.000000000000000000e+00 0.000000000000000000e+00 4 | 6.346651825433925753e-02 6.342391965656450636e-02 5 | 1.269330365086785151e-01 1.265924535737492640e-01 6 | 1.903995547630177865e-01 1.892512443604102146e-01 7 | 2.538660730173570301e-01 2.511479871810792242e-01 8 | 3.173325912716962738e-01 3.120334456984870664e-01 9 | 3.807991095260355729e-01 3.716624556603275731e-01 10 | 4.442656277803748166e-01 4.297949120891716435e-01 11 | 5.077321460347140603e-01 4.861967361004687072e-01 12 | 5.711986642890533039e-01 5.406408174555975554e-01 13 | 6.346651825433925476e-01 5.929079290546404035e-01 14 | 6.981317007977317912e-01 6.427876096865392519e-01 15 | 7.615982190520711459e-01 6.900790114821120369e-01 16 | 8.250647373064103896e-01 7.345917086575333155e-01 17 | 8.885312555607496332e-01 7.761464642917568213e-01 18 | 9.519977738150888769e-01 8.145759520503357276e-01 19 | 1.015464292069428121e+00 8.497254299495143881e-01 20 | 1.078930810323767364e+00 8.814533634475820723e-01 21 | 1.142397328578106608e+00 9.096319953545183301e-01 22 | 1.205863846832445851e+00 9.341478602651067664e-01 23 | 1.269330365086785095e+00 9.549022414440738737e-01 24 | 1.332796883341124339e+00 9.718115683235416524e-01 25 | 1.396263401595463582e+00 9.848077530122080203e-01 26 | 1.459729919849802826e+00 9.938384644612541230e-01 27 | 1.523196438104142292e+00 9.988673391830079629e-01 28 | 1.586662956358481535e+00 9.998741276738750683e-01 29 | 1.650129474612820779e+00 9.968547759519423845e-01 30 | 1.713595992867160023e+00 9.898214418809326842e-01 31 | 1.777062511121499266e+00 9.788024462147787430e-01 32 | 1.840529029375838510e+00 9.638421585599420416e-01 33 | 1.903995547630177754e+00 9.450008187146684557e-01 34 | 1.967462065884516997e+00 9.223542941045813626e-01 35 | 2.030928584138856241e+00 8.959937742913358649e-01 36 | 2.094395102393195707e+00 8.660254037844385966e-01 37 | 2.157861620647534728e+00 8.325698546347714002e-01 38 | 2.221328138901874194e+00 7.957618405308319876e-01 39 | 2.284794657156213216e+00 7.557495743542583799e-01 40 | 2.348261175410552681e+00 7.126941713788628174e-01 41 | 2.411727693664891703e+00 6.667690005162916211e-01 42 | 2.475194211919231169e+00 6.181589862206050556e-01 43 | 2.538660730173570190e+00 5.670598638627708521e-01 44 | 2.602127248427909656e+00 5.136773915734063056e-01 45 | 2.665593766682248678e+00 4.582265217274105185e-01 46 | 2.729060284936588143e+00 4.009305354066136085e-01 47 | 2.792526803190927165e+00 3.420201433256688794e-01 48 | 2.855993321445266631e+00 2.817325568414296155e-01 49 | 2.919459839699605652e+00 2.203105327865408081e-01 50 | 2.982926357953945118e+00 1.580013959733498619e-01 51 | 3.046392876208284584e+00 9.505604330418243597e-02 52 | 3.109859394462623605e+00 3.172793349806765639e-02 53 | 3.173325912716963071e+00 -3.172793349806785068e-02 54 | 3.236792430971302093e+00 -9.505604330418263026e-02 55 | 3.300258949225641558e+00 -1.580013959733500839e-01 56 | 3.363725467479980580e+00 -2.203105327865405860e-01 57 | 3.427191985734320046e+00 -2.817325568414298376e-01 58 | 3.490658503988659067e+00 -3.420201433256686574e-01 59 | 3.554125022242998533e+00 -4.009305354066138305e-01 60 | 3.617591540497337554e+00 -4.582265217274102964e-01 61 | 3.681058058751677020e+00 -5.136773915734064166e-01 62 | 3.744524577006016042e+00 -5.670598638627706300e-01 63 | 3.807991095260355507e+00 -6.181589862206052777e-01 64 | 3.871457613514694529e+00 -6.667690005162915101e-01 65 | 3.934924131769033995e+00 -7.126941713788628174e-01 66 | 3.998390650023373016e+00 -7.557495743542581579e-01 67 | 4.061857168277712482e+00 -7.957618405308320986e-01 68 | 4.125323686532051504e+00 -8.325698546347712892e-01 69 | 4.188790204786391413e+00 -8.660254037844388186e-01 70 | 4.252256723040730435e+00 -8.959937742913359759e-01 71 | 4.315723241295069457e+00 -9.223542941045813626e-01 72 | 4.379189759549408478e+00 -9.450008187146683447e-01 73 | 4.442656277803748388e+00 -9.638421585599421526e-01 74 | 4.506122796058087410e+00 -9.788024462147787430e-01 75 | 4.569589314312426431e+00 -9.898214418809326842e-01 76 | 4.633055832566765453e+00 -9.968547759519422735e-01 77 | 4.696522350821105363e+00 -9.998741276738750683e-01 78 | 4.759988869075444384e+00 -9.988673391830079629e-01 79 | 4.823455387329783406e+00 -9.938384644612541230e-01 80 | 4.886921905584122428e+00 -9.848077530122081313e-01 81 | 4.950388423838462337e+00 -9.718115683235416524e-01 82 | 5.013854942092801359e+00 -9.549022414440738737e-01 83 | 5.077321460347140381e+00 -9.341478602651067664e-01 84 | 5.140787978601480290e+00 -9.096319953545182191e-01 85 | 5.204254496855819312e+00 -8.814533634475819612e-01 86 | 5.267721015110158334e+00 -8.497254299495143881e-01 87 | 5.331187533364497355e+00 -8.145759520503359497e-01 88 | 5.394654051618837265e+00 -7.761464642917565993e-01 89 | 5.458120569873176287e+00 -7.345917086575330934e-01 90 | 5.521587088127515308e+00 -6.900790114821120369e-01 91 | 5.585053606381854330e+00 -6.427876096865395850e-01 92 | 5.648520124636194240e+00 -5.929079290546401815e-01 93 | 5.711986642890533261e+00 -5.406408174555974444e-01 94 | 5.775453161144872283e+00 -4.861967361004687627e-01 95 | 5.838919679399211304e+00 -4.297949120891719210e-01 96 | 5.902386197653551214e+00 -3.716624556603272400e-01 97 | 5.965852715907890236e+00 -3.120334456984870664e-01 98 | 6.029319234162229257e+00 -2.511479871810793352e-01 99 | 6.092785752416569167e+00 -1.892512443604097427e-01 100 | 6.156252270670908189e+00 -1.265924535737490420e-01 101 | 6.219718788925247210e+00 -6.342391965656452024e-02 102 | 6.283185307179586232e+00 -2.449293598294706414e-16 103 | -------------------------------------------------------------------------------- /rech/1_fonctionnement_parametre.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | from tkinter import * 4 | import webbrowser 5 | import tkinter.filedialog 6 | from tkinter import ttk 7 | 8 | 9 | def aide_cours(): 10 | webbrowser.open_new("http://www.patricebacchin.fr/cours/membrane/") 11 | 12 | def enregistrer_fichier(mesFormats,interface): 13 | tkinter.filedialog.asksaveasfile(title="Enregistrer sous … un fichier",filetypes=[('CSV files','.csv')]) 14 | 15 | def ouvrir_fichier(): 16 | tkinter.filedialog.askopenfilename(title="Ouvrir un fichier",filetypes=[('CSV files','.csv')]) 17 | 18 | def sauv_donnée(): 19 | Fichier = open("Valeur rentrée.txt", 'w') 20 | Fichier.writelines(str(L)) 21 | Fichier.close() 22 | 23 | def liste(): 24 | L=[] 25 | global const, arg4 26 | var=arg4.get() 27 | print(var) 28 | L.append(var) 29 | print(L) 30 | 31 | def paramètre(arg1, arg2, arg3): 32 | global const, arg4 33 | arg4 = DoubleVar() 34 | text = Label(arg1, text=arg2, width=10) 35 | entree=Entry(arg1, textvariable=arg4, width=30) 36 | text.grid(row=arg3, column=0) 37 | bouton=Button(arg1, text="Entrée", command=liste) 38 | entree.grid(row=arg3, column=1) 39 | bouton.grid(row=arg3, column=2) 40 | const += 1 41 | 42 | def onglet(arg1, arg2): 43 | n = ttk.Notebook(arg1) 44 | n.grid(row=5, column=0) 45 | o1 = Frame(n) 46 | o1.grid(row=5, column=0) 47 | n.add(o1, text = arg2) 48 | 49 | def données(): 50 | fen_1 = Frame(fen) 51 | fen_1.grid(row=5, column=0, columnspan=3, sticky="nsew", pady=10) 52 | onglet(fen_1, "Calcul nombre de Reynolds") 53 | paramètre(fen_1, "Densité (noté {0:^1s})".format(chr(961)), 6) 54 | # paramètre(fen_1, "Vitesse moyenne de la fibre", 7, "val2") 55 | # paramètre(fen_1, "Viscosité dynamique (noté {0:^1s})".format(chr(956)), 8, "val3") 56 | # paramètre(fen_1, "Rayon du papier", 9, "val4") 57 | button_1 = Button(fen_1, text="Valider", font=("Times New Roman", 25), bg='white', fg='#C1B5B3', command=sauv_donnée) 58 | button_1.grid(row=6, column=3, pady=10) 59 | 60 | #création d'une première fenètre 61 | fen = Tk() 62 | 63 | #personnalisation de cette fenêtre 64 | fen.title("Simulation du procédé membranaire") 65 | fen.geometry("1080x720") 66 | fen.minsize(480,360) 67 | fen.iconbitmap("") 68 | fen.config(background='#C1B5B3') 69 | 70 | # Configuration du gestionnaire de grille 71 | fen.rowconfigure(0, weight=3) 72 | fen.columnconfigure(0, weight=3) 73 | 74 | #Création de la barre d'outil 75 | menubar = Menu(fen) 76 | fen.config(menu=menubar) 77 | menufichier = Menu(menubar,tearoff=0) 78 | menubar.add_cascade(label="Fichier", menu=menufichier) 79 | menufichier.add_command(label="Ouvrir ", command=ouvrir_fichier) 80 | menufichier.add_separator() 81 | menufichier.add_command(label="Enregistrer") 82 | menufichier.add_command(label="Enregistrer sous", command=enregistrer_fichier) 83 | menufichier.add_separator() 84 | menufichier.add_command(label="Quitter", command=fen.destroy) 85 | 86 | #Programme principal 87 | const = 0 88 | arg4 = 0 89 | #Créer la frame 90 | frame =Frame(fen, bg='#C1B5B3') 91 | 92 | #Ajout texte pour rentrer à la page d'acceuil 93 | label_title = Label(frame, text="Accueil", font=("Times New Roman", 40), bg='#C1B5B3', fg='white') 94 | label_title.grid(row=1, column=0, columnspan=2,sticky="nsew", pady=10) 95 | 96 | #Ajouter un premier bouton 97 | button_1 = Button(frame, text="Données utiles pour la simulation", font=("Times New Roman", 25), bg='white', fg='#C1B5B3', command=données) 98 | button_1.grid(row=2, column=0, columnspan=2,sticky="nsew", pady=10) 99 | 100 | #Ajouter un troisième bouton 101 | button_1 = Button(frame, text="Commencer la simulation", font=("Times New Roman", 25), bg='white', fg='#C1B5B3') 102 | button_1.grid(row=3, column=0, columnspan=2,sticky="nsew", pady=10) 103 | 104 | #Ajouter un second bouton 105 | button_3 = Button(frame, text="Aide", font=("Times New Roman", 25), bg='white', fg='#C1B5B3', command=aide_cours) 106 | button_3.grid(row=4, column=0, columnspan=2,sticky="nsew", pady=10) 107 | 108 | #Ajouter 109 | frame.grid(row=0, column=0, columnspan=2) 110 | 111 | #Affichage de la fenetre 112 | fen.mainloop() 113 | -------------------------------------------------------------------------------- /rech/filtration_membranaire-v4-pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Mon Apr 29 13:26:48 2019 4 | 5 | @author: B. Bonnet 6 | """ 7 | 8 | #faudra ensuite : - trouver phi critique, passer à phi compression au dessus de phi critique 9 | 10 | 11 | import numpy as np 12 | import matplotlib.pyplot as plt 13 | from scipy.optimize import fsolve 14 | from scipy import misc 15 | import time 16 | from mpl_toolkits.mplot3d import Axes3D 17 | 18 | start = time.time() 19 | 20 | 21 | #FUNCTIONS 22 | #------------------------------------------------------------------------------ 23 | 24 | 25 | def mu(phi): # (eq.18) 26 | return mu_b*( 1 + (1.25*phi)/ (1- phi/phi_cp) )**2 27 | 28 | 29 | def dPI_dphi(phi): 30 | return misc.derivative(PI,phi,dx=1e-6) 31 | def dPI0_dphi(phi): 32 | return misc.derivative(PI0,phi,dx=1e-6) 33 | 34 | def H(phi): # Happel function (eq.6) 35 | return (6 + 4*phi**(5/3.) ) / ( 6 - 9*phi**(1./3.) + 9*phi**(5/3.) - 6*phi**2 ) 36 | 37 | 38 | def D(phi): # (eq.6) 39 | return Vp*dPI_dphi(phi) / (6*np.pi*mu(phi)*a*H(phi)) 40 | def D_0(phi): # (eq.6) 41 | return Vp*dPI0_dphi(phi) / (6*np.pi*mu(phi)*a*H(phi)) 42 | 43 | 44 | def G_s(phi_w): #simplified expression of G(phib,phiw) (D and mu: constants) (s stands for simplified) (eq.21) 45 | return (D0**2/mu_b) * ( np.log(phi_w)*(phi_w - phi_b) - phi_w*(np.log(phi_w)-1) + phi_b*(np.log(phi_b)-1) ) 46 | # return ((D(phi_w)**2)/mu(phi_w))*( np.log(phi_w)*(phi_w - phi_b) - phi_w*(np.log(phi_w)-1) + phi_b*(np.log(phi_b)-1) ) 47 | 48 | 49 | def f1(phi): # function of inner integral (eq.21) 50 | return D(phi) / (phi*mu(phi)) 51 | 52 | 53 | def int1(phi0, phi_wi): # inner integral (eq.21) 54 | MAX= 50 55 | int0= 0 56 | phi= np.linspace(phi0,phi_wi,MAX) 57 | for i in range(MAX-1): 58 | int0 = int0 + ( f1(phi[i]) + f1(phi[i+1]) ) * (phi[i+1]-phi[i]) / 2. 59 | return int0 60 | 61 | 62 | def f2(phi, phi_wi): 63 | return D(phi)*int1(phi, phi_wi) # function of outter integral (eq.21) 64 | 65 | 66 | def G(phi_wi): # (eq21) (double integral solved by trapezoidal integration) 67 | MAX= 20 # 20 seems a good balance between processing time and and precision 68 | int2= 0 69 | phi= np.linspace(phi_b,phi_wi,MAX) 70 | for i in range(MAX-1): 71 | int2= int2 + ( f2(phi[i], phi_wi)+f2(phi[i+1], phi_wi) ) * (phi[i+1]-phi[i]) / 2. 72 | return int2 73 | 74 | 75 | def eq20(Q): #(eq.20) 76 | K= rho*f*GG/( phi_b*np.pi*(R**3)*(Vwi**2) ) # GG = G(phi_wi) 77 | return Q0 - Q - (Q**2)*K # develloped expression of the line below 78 | #return Vwi*np.sqrt(Q0-Q) - (Q/R)*np.sqrt( rho*f*G_s(phi_wi) / (phi_b*np.pi*R) ) 79 | 80 | def inttrapz(i): # Only the last integration is performed, the other ones are kept in memory in intz (list) 81 | int_temp= (f3(phi_w[i]) + f3(phi_w[i-1]))*(phi_w[i-1]-phi_w[i])/2 82 | #int_final= int_temp + sum(intz) 83 | return int_temp # New value of intz: intz[i] 84 | 85 | def f3(phi): 86 | return D(phi)/phi 87 | 88 | #def poly20(Vwi,phi_wi): # attempt to find Q by solving a polynome (devellopment of eq.20) 89 | # K= rho*f*G_s(phi_wi)/( phi_b*np.pi*(R**3)*(Vwi**2) ) 90 | # delta= np.sqrt(1+4*K*Q0) 91 | # res= (-1 + delta)/(2*K) 92 | # return K, delta, res 93 | 94 | 95 | def PI0(phi): #(eq.7) 96 | return PI_ent(phi) + PI_vdw(phi) + PI_ele(phi) 97 | 98 | def PI(phi): #(eq.7) 99 | if type(phi) == np.float64 or type(phi) == float : 100 | po=PI_ent(phi) + PI_vdw(phi) + PI_ele(phi) 101 | if phi>=phi_crit: 102 | po=PI0(phi_crit)*((1.-phi_crit/phi_cp)/(1.-phi/phi_cp))**(1./m) 103 | if type(phi) == np.ndarray : 104 | po=np.zeros(len(phi)) 105 | for i in range (len(phi)): 106 | po[i]=PI_ent(phi[i]) + PI_vdw(phi[i]) + PI_ele(phi[i]) 107 | if phi[i] >= phi_crit : 108 | po[i]=PI0(phi_crit)*((1.-phi_crit/phi_cp)/(1.-phi[i]/phi_cp))**(1./m) 109 | return po 110 | 111 | 112 | def PI_ent(phi): #(appendix) 113 | X = 6.2028*np.exp( (phi_cp - phi)*(7.9 - 3.9*(phi_cp - phi)) ) 114 | Hall_approx = (1 + phi + phi**2 - 0.67825*phi**3 - phi**4 - 0.5*phi**5 - X*phi**6) / (1 -3*phi +3*phi**2 -1.04305*phi**3) 115 | return (kB*T*phi/Vp)*Hall_approx 116 | 117 | 118 | def PI_vdw(phi): #(appendix) 119 | return (-Zn*A*phi**3)/( 48*np.pi*a**3 * (phi_cp - phi_cp**(1/3.)*phi**(2/3.))**2 ) 120 | 121 | 122 | def PI_ele(phi): #(appendix) 123 | epsilon= 32*np.pi*np.sqrt(2)* (3/(4.*np.pi*np.sqrt(2)))**(2/3.) # Epsilon: geometric factor 124 | C0= I*1000 # Initial concentration in SI units (mol/m3) (monovalent ions: I=C0) 125 | zeta_star = ele_charge*Z*zeta/(kB*T) # reduced zeta potential 126 | kappa= np.sqrt( (2*1e3*Na*(ele_charge**2)*I)/(epsr*eps0*kB*T) ) # Debye-Hückel parameter 127 | return (epsilon*Na*kB*T*C0/Zn)*( np.cosh( kappa*a*zeta_star/(kappa*a*phi**(-1./3.)*np.cosh(kappa*a*(1-phi**(-1./3.))) + np.sinh(kappa*a*(1-phi**(-1./3.))) ) ) -1.0 ) 128 | #------------------------------------------------------------------------------ 129 | 130 | 131 | # DATA SET USED FOR SIMULATIONS (Table 1 + addons) 132 | # ----------------------------------------------------------------------------- 133 | 134 | 135 | # Fiber 136 | 137 | R= 3e-2 # m (Radius R = 3 mm IN THE PAPER) 138 | L= 0.2 # m (Length L = 1.2 m IN THE PAPER) 139 | Lp= 1e-9 # m/(Pa.s) (Membrane Permeability) 140 | 141 | # Inlet condition 142 | 143 | Um= 1.0 # m/s (Mean velocity) 144 | Q0= Um*np.pi*(R**2) # Q0: Total flow rate for x= 0 (m3/s) 145 | P0= 1.5e4 # Pa (Pressure P0= 100-0 kPa) 146 | phi_b= 1e-3 # Volumic fraction in the bulk (outside of boundary layer) 147 | 148 | # Suspended matter 149 | 150 | a= 1e-7 #m (Radius a = 100 nm in most cases, a= 5-1000 nm) 151 | Vp= (4/3.)*np.pi*(a**3) #m3 (Particle volume) 152 | zeta= 3e-2 #V (Zêta potential zeta = 30 mV) 153 | A= 1e-20 #J (Hamaker constant) 154 | 155 | #Suspension medium 156 | 157 | I= 1e-5 #M (mol/l) (Ionic strength) 158 | Z= 1.0 # Ion valence 159 | mu_b= 1e-3 # kg/(m.s) (Dynamic viscosity) 160 | 161 | #Physicochemical properties 162 | 163 | T= 298.15 #K (Standard temperature) 164 | kB= 1.381e-23 #m².kg/(s².K) (Boltzmann constant) 165 | Na= 6.022e23 #mol-1 (Avogadro number) 166 | rho= 1000 #kg/(m3) (Solution density of water at 298 K) 167 | ele_charge= 1.602e-19 #C (elementary charge) 168 | epsr= 78.4 # Water permittivity 169 | eps0= 8.854e-12 #F/m (Vacuum permittivity) 170 | Zn= 12.0 # Number of neighboring particles in the cell lattice 171 | phi_cp= np.pi*np.sqrt(2)/6. # phi in an hexagonal close packing 172 | Rm= 1./(Lp*mu_b) # m-1 (Membrane resistance) 173 | D0 = kB*T / (6*np.pi*mu_b*a) # Simplified diffusion coefficient 174 | m=0.3 #compressibility of the deposit 175 | # ----------------------------------------------------------------------------- 176 | 177 | 178 | Re= rho*Um*2*R/mu_b 179 | print("Reynolds number: Re=",Re) 180 | 181 | if Re<= 2100: 182 | f= 16./Re 183 | else: 184 | f= 0.0791/(Re**(1/4.)) 185 | print("Friction factor: f=",f) 186 | print("") 187 | 188 | phi_crit=fsolve(D_0,0.5)[0] 189 | print ('phi_crit=',phi_crit) 190 | 191 | phi_w=np.linspace(phi_b, phi_cp-0.1, 1000) # phi_cp is the maximal value reached by phi (close packing) 192 | 193 | plt.figure(0) 194 | 195 | plt.subplot(221) 196 | plt.plot(phi_w, G_s(phi_w),label='G_s= f(phi_w)') 197 | plt.title('Simplified function G_s (no integrations)') 198 | plt.xlabel('Surface concentration phi_w') 199 | plt.ylabel('G_s') 200 | plt.legend(loc='best') 201 | 202 | #plt.subplot(222) 203 | #plt.plot(phi_w, G(phi_w),label='G= f(phi_w)') 204 | #plt.title('Function G (double integration)') 205 | #plt.xlabel('Surface concentration phi_w') 206 | #plt.ylabel('G') 207 | #plt.legend(loc='best') 208 | 209 | plt.subplot(223) 210 | plt.plot(phi_w, dPI_dphi(phi_w)) 211 | plt.title('Derivative function of the osmotic pressure PI(phi_w)') 212 | plt.xlabel('Surface concentration phi_w') 213 | plt.ylabel('dPI/dphi_w') 214 | plt.legend(loc='best') 215 | 216 | plt.subplot(224) 217 | plt.plot(phi_w, D(phi_w)) 218 | plt.title('Diffusion coefficient D(phi_w)') 219 | plt.xlabel('Surface concentration phi_w') 220 | plt.ylabel('D') 221 | plt.legend(loc='best') 222 | 223 | plt.show() 224 | 225 | # Plotting of PI(phi) 226 | #------------------------------------------------------------------------------ 227 | 228 | 229 | plt.figure(1) 230 | 231 | plt.subplot(221) 232 | plt.plot(phi_w,PI_ent(phi_w),label='PI ent',color='C1') 233 | plt.title('Entropic contribution to osmotic pressure: PI_ent(phi_w)') 234 | plt.xlabel('phi_w') 235 | plt.ylabel('PI_ent (Pa)') 236 | plt.legend(loc='best') 237 | 238 | plt.subplot(222) 239 | plt.plot(phi_w,PI_vdw(phi_w),label='PI vdw',color='C2') 240 | plt.title('Van der Walls attractive contribution to osmotic pressure: PI_vdw(phi_w)') 241 | plt.xlabel('phi_w') 242 | plt.ylabel('PI_vdw (Pa)') 243 | plt.legend(loc='best') 244 | 245 | plt.subplot(223) 246 | plt.plot(phi_w,PI_ele(phi_w),label='PI ele',color='C3') 247 | plt.title('Electrostatic contribution to osmotic pressure: PI_ele(phi_w)') 248 | plt.xlabel('phi_w') 249 | plt.ylabel('PI_ele (Pa)') 250 | plt.legend(loc='best') 251 | 252 | plt.subplot(224) 253 | plt.plot(phi_w,PI(phi_w),label='PI tot') 254 | plt.plot(phi_w,PI0(phi_w), '--',label='PI ent+vdw+elec') 255 | plt.plot(phi_w,PI_ent(phi_w),label='PI ent') 256 | plt.plot(phi_w,PI_vdw(phi_w),label='PI vdw') 257 | plt.plot(phi_w,PI_ele(phi_w),label='PI ele') 258 | plt.xlabel('phi_w') 259 | plt.ylabel('PI (Pa)') 260 | axes=plt.gca() 261 | axes.set_ylim([-PI0(phi_crit),2.*PI0(phi_crit)]) 262 | plt.legend(loc='best') 263 | plt.annotate('phi crit', xy=(phi_crit, PI(phi_crit)), xytext=(phi_crit,PI(phi_crit)/2), arrowprops=dict(facecolor='red', shrink=0.05,)) 264 | 265 | 266 | plt.title('PI total: sum off all the contributions to osmotic pressure') 267 | plt.show() 268 | 269 | i_max=0 270 | for i in range(1000-1): # find phi_c as PI(phi_c)= PI maximum 271 | if PI(phi_w[i])>PI(phi_w[i_max]): 272 | i_max=i 273 | 274 | phi_c= phi_w[i_max] 275 | print("") 276 | print("phi_c =",phi_c,", PI(phi_c) = PI_max =",PI(phi_c),"Pa.") 277 | print("") 278 | #------------------------------------------------------------------------------ 279 | 280 | 281 | # Resolution of eq. (8), (9), (20) and (22) depending on phi 282 | #------------------------------------------------------------------------------ 283 | 284 | 285 | # Initialization (x=0) 286 | 287 | P=[P0] 288 | Q=[Q0] 289 | phi_w=[phi_b] 290 | Vw=[ (P[0] - PI(phi_w[0]))/ (Rm*mu_b) ] 291 | dx=[0] 292 | x=[0] 293 | dphi= 0.01 294 | 295 | # Loop 296 | 297 | i=1 298 | phi_w.append( phi_w[i-1] + dphi ) 299 | while x[i-1]0.03 : 311 | del Vw[-1] 312 | del Q[-1] 313 | del dx[-1] 314 | del x[-1] 315 | del P[-1] 316 | del phi_w[-1] 317 | dphi=dphi*0.5 318 | phi_w.append( phi_w[i-1] + dphi ) 319 | else: 320 | i+= 1 321 | phi_w.append( phi_w[i-1] + dphi ) 322 | 323 | index=i 324 | phi_w.remove(phi_w[index]) # value of phi_w in excess 325 | #------------------------------------------------------------------------------ 326 | 327 | 328 | # 3D plotting of PHI=f(XX,ZZ) (XX=x and ZZ=z) 329 | #------------------------------------------------------------------------------ 330 | 331 | #Initialisation 332 | 333 | ZZ=[0] # X axis in the 3D plot 334 | intz=[0] # used for ZZ 335 | XX=[0] # Y axis in the 3D plot 336 | PHI=[phi_b] # Z axis in the 3D plot 337 | 338 | # Loop 339 | 340 | for i in range(1,index): 341 | intz.append( inttrapz(i) ) 342 | ZZ_res=0 343 | for j in range(i+1): 344 | XX.append( x[i] ) # XX = [x0, x1, x1, x2, x2, x2, ...] 345 | PHI.append( phi_w[i-j]) # PHI = [phi_b, phi_w1, phi_b, phi_w2, phi_w1, phi_b, ...] 346 | if j==0: 347 | ZZ.append(0) 348 | else: 349 | ZZ_res=ZZ_res+ - intz[i-j+1] / Vw[i] #[0, 0, z1, 0, z1, Z2, ....] 350 | ZZ.append(ZZ_res) 351 | 352 | 353 | #print(XX) 354 | #print("") 355 | #print(ZZ) 356 | #print("") 357 | #print(PHI) 358 | #print("") 359 | #print(intz) 360 | 361 | x_plane, y_plane = np.meshgrid(np.linspace(0,ZZ[len(ZZ)-1],100), np.linspace(0,1.2,100)) 362 | Z = x_plane*0 + phi_crit 363 | 364 | fig = plt.figure(2) 365 | ax = Axes3D(fig) 366 | ax.plot_surface(x_plane, y_plane, Z, alpha=0.2) # plot a plane at z=phi_crit 367 | p= ax.scatter(ZZ, XX, PHI, c=PHI, cmap='hsv', linewidth=0.5) 368 | ax.set_xlabel('z (m)') 369 | ax.set_ylabel('x (m)') 370 | ax.set_zlabel('phi') 371 | plt.title('2D concentration profile: phi=f(x,z)') 372 | fig.colorbar(p) 373 | plt.show() 374 | #------------------------------------------------------------------------------ 375 | 376 | 377 | print("i max=",index) 378 | print("Size of P:",np.size(P)) 379 | print("Size of Q:",np.size(Q)) 380 | print("Size of phi_w:",np.size(phi_w)) 381 | print("Size of Vw:",np.size(Vw)) 382 | print("Size of dx:",np.size(dx)) 383 | print("Size of x:",np.size(x)) 384 | print("Size of XX:",np.size(XX)) 385 | print("Size of ZZ:",np.size(ZZ)) 386 | print("Size of PHI:",np.size(PHI)) 387 | print("Last value of x:",x[index-1]," (for phi_w=",phi_w[index-1],")") 388 | 389 | # Plotting 390 | 391 | plt.figure(3) 392 | 393 | plt.subplot(221) 394 | plt.plot(x,P,label='P(x)',color='C4') 395 | plt.title('Transmembrane Pressure: P(x)') 396 | plt.xlabel('x (m)') 397 | plt.ylabel('P (Pa)') 398 | plt.legend(loc='best') 399 | 400 | plt.subplot(222) 401 | plt.plot(x,Q,label='Q(x)',color='C5') 402 | plt.title('Global flow rate: Q(x)') 403 | plt.xlabel('x (m)') 404 | plt.ylabel('Q (m3/s)') 405 | plt.legend(loc='best') 406 | 407 | plt.subplot(223) 408 | plt.plot(x,phi_w,label='phi_w(x)',color='C6') 409 | plt.title('Surface concentration alongside the membrane: phi_w(x)') 410 | plt.xlabel('x (m)') 411 | plt.ylabel('phi_w') 412 | plt.legend(loc='best') 413 | 414 | plt.subplot(224) 415 | plt.plot(x,Vw,label='Vw(x)',color='C7') 416 | plt.title('Local permeate flux: Vw(x)') 417 | plt.xlabel('x (m)') 418 | plt.ylabel('Vw (m/s)') 419 | plt.legend(loc='best') 420 | 421 | plt.show() 422 | 423 | 424 | 425 | #plt.figure (3) 426 | #Q20=np.linspace(0.9*Q0,Q0,100) 427 | #plt.plot(Q20,eq20(Q20)) 428 | #plt.title("eq20=f(Q)") 429 | #plt.show 430 | 431 | #for i in range(0,5): 432 | # print("i=",i,"\n phi_w=",phi_w[i],"\n Vw=",Vw[i],"\n Q=",Q[i],"\n dx=",dx[i],"\n x=",x[i],"\n P=",P[i]) 433 | # print("") 434 | 435 | 436 | #Vwi=Vw[1] 437 | #phi_wi=phi_w[1] 438 | #print("Analytic resolution of eq.20, for Q[1]:") 439 | #print("phi_w[1]=",phi_wi,", Vw[1]=",Vwi) 440 | #print(" K , delta, Q:",poly20(Vwi,phi_wi)) 441 | #------------------------------------------------------------------------------ 442 | 443 | 444 | 445 | #------------------------------------------------------------------------------ 446 | finish = time.time() 447 | print("") 448 | print('Time spent: ', finish-start ,'s.') -------------------------------------------------------------------------------- /rech/readme: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy==1.16.* 2 | matplotlib==3.* 3 | seaborn==0.8.1 4 | pandas 5 | --------------------------------------------------------------------------------