Dans ce notebook, on se propose d'analyser les données d'une séquence de vidage d'un reservoir d'eau et de les comparer à une relation théorique que nous établierons à partir des notions vues en cours.
Pour ceux qui ne seraient pas familier avec le language python, vous pouvez consulter le Notebook Introduction au Python.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import copy
matplotlib.style.use('fivethirtyeight')
plt.rc('xtick',labelsize=14)
plt.rc('ytick',labelsize=14)
%matplotlib inline
Tout d'abord, nous devons construire une relation théorique permettant d'établir l'évolution de la hauteur d'eau $h(t)$ dans le réservoir à partir d'une hauteur initial $h_0$.
Pour cela, on considère un réservoir cylindrique de diamètre $D$ percé d'un orifice circulaire de diamètre $d$. La hauteur d'eau initial entre l'orifice et le haut du liquide est noté $h_0$.
Pour une hauteur de liquide donnée, nous avons démontré en cours (à partir du théorème de Bernoulli) que la vitesse du liquide au niveau de l'orifice était donnée par: $$ V_e=\sqrt{2gh} $$
Rappeller les conditions de validité de cette relation
Pendant un petit laps de temps $\Delta t$, le réservoir s'est vidé de $\Delta h$. Exprimer $\Delta h$ en fonction de $\Delta t$ et montrer que l'on obtient une relation du type:
$$ \Delta h=-k\sqrt{h}\Delta t $$Mettre cette expression sous la forme d'une équation différentielle et proposer une méthode pour calculer le temps de vidage.
On montrera que:
$$ T=\dfrac{D^2}{d^2}\sqrt{\dfrac{2}{g}}\sqrt{h_0} $$On considère ici un réservoir cylindrique dont on connait le périmètre $P=28$cm, percé d'un orifice circulaire de diamètre $d=8$mm. La hauteur d'eau initiale est de $h_0=13$cm.
Cacluler le temps de vidage et tracer l'évolution de $h$ en fonction du temps
g0=...
h0=...
P=...
D=...
d=...
r2=d**2/D**2
T=np.sqrt(2*h0/g0)/r2
print('Temps de vidage: ',T, ' secondes')
Pour tracer l'évolution de $h$ en fonction du temps, on échantillonne le temps de 0 à $T$ par tranche de $\Delta t=0.1$s:
tth=np.arange(0,T,0.1)
Hth=...
plt.plot(tth,Hth)
plt.xlabel('Temps (s)')
plt.ylabel('Heuteur d\'eau (m)')
On réalise maintenant une petite expérience avec le réservoir utilisé précédemment. La vidange est présentée dans la vidéo suivante:
from IPython.display import HTML
HTML("""<center>
<video width="700" controls>
<source src="https://hpp.education/Lessons/MecaFlu_L1/Files/Vidange.mp4" type="video/mp4">
</video>
</center>""")
Cette expérience nous permet d'enregistrer la hauteur du liquide à chaque instant. Cette position est enregistrée à l'aide d'un logiciel de tracking qui renvoi le fichier track_front1.dat. Ce fichier contient la position en pixel du front de liquide enregistré pour chaque images de la vidéo. Le fichier contient donc 3 colonnes:
Frame | X-position | Y-position |
---|
Dans une vidéos, les pixels sont numérotés de haut en bas. Ainsi le pixel situé en $X-position=0$ et$Y-position=0$ se situe tout en haut à gauche de la vidéo.
# Chargement des données dans la variable data
data=np.loadtxt("track_front1.dat")
# La première colonne (les frames) est stocké dans la variable frame:
frame=data[:,0]
Regardons l'évolution des grandeurs enregistrées dans ce fichier:
fig=plt.figure(figsize=(16,4))
fig.add_subplot(121)
plt.plot(frame,data[:,1])
plt.xlabel('Frames')
plt.ylabel('X-pos (px)')
fig.add_subplot(122)
plt.plot(frame,data[:,2])
plt.xlabel('Frames')
plt.ylabel('Y-pos (px)')
On considére que l'enregistrement des données a débuté lorsque $h=h0$ et se termine quand $h=0$.
Sachant que cette vidéo contient 25 images par secondes, calculer le temps réel de l'expérience ainsi que la hauteur d'eau en mètre
time=...
Hexp=...
Comparer la courbe théorique et la courbe expérimental. (On pourra prendre 1 point sur 30 pour les données expérimentales)
plt.plot(tth,Hth,'.',label='th')
plt.plot(time[::30],Hexp[::30],'ks',label='expe')
plt.legend()
Commentiares
Entrainez - vous à manipuler ce notebook sur le serveur Jupyter. N'hesitez pas à modifier les valeurs, ajouter de nouvelles cellules. On pourra par exemple:
from IPython.core.display import HTML
style=open('notebooks.css', "r").read()
HTML(style)