\n",
"\n",
"\n",
"Dans ce notebook, on se propose de présenter les caratéristiques d'un modèle d'atmosphère standard issue de mesures ballon. On pourra ainsi se familiariser à l'utilisation de Python pour la lecture de Table de données et leur représentations graphiques.\n",
"\n",
"Ce notebook est également une présentation rapide de l'évolution des grandeurs standards dans l'atmosphère terrestre (Pression, température, masse volumique).\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib\n",
"matplotlib.style.use('fivethirtyeight')\n",
"plt.rc('xtick',labelsize=14)\n",
"plt.rc('ytick',labelsize=14)\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L'idée c'est de représenter graphiquement l'évolution des grandeurs principales à partir des données d'un fichier \"Data_Atmo.dat\".\n",
"\n",
"D'abord si vous executez ce notebook pour la première fois, il faut télécharger les données atmo en décommentant la ligne suivante:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"#! wget http://hpp.education/Lessons/CFD_FIP/Files/Data_Atmo.dat"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ensuite on charge le fichier de donnée: *Data_Atmo.dat*:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"data=np.loadtxt('Data_Atmo.dat',dtype='f8');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ainsi la variable **data** est maintenant un tableau contenant toutes les données du fichier: "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"data.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On constate qu'il contient 201 lignes et 10 colonnes. Les 10 colonnes correspondent aux grandeurs enregistrées lors des mesures ballon à savoir:\n",
"\n",
"0. Altitude (m)\n",
"1. Accélération de la pesenteur ($g_0$ en $m/s^{-2}$)\n",
"2. Température (Kelvin)\n",
"3. Nombre moyen de molécules d'air par mètre cube.\n",
"4. Masse volumique (kg/$m^3$)\n",
"5. $\\rho/\\rho_0$\n",
"6. Vitesse du son $c_0$ (m/s) \n",
"7. Rapport de viscosités cinématiques $\\nu/\\nu_0$\n",
"8. Rapport des conductivités thermiques $\\kappa/\\kappa_0$\n",
"9. Rapport de pression $p/p_0$\n",
"\n",
"Au niveau du sol on a donc:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print('T=',data[0,2])\n",
"print('p/p_0=',data[0,9])\n",
"print('rho=',data[0,4])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Evolution des données atmosphériques en fonction de l'altitude\n",
"\n",
"Ainsi on peut tracer l'évolution de la pression atmosphérique en fonction de l'altitude:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.plot(data[:,0],data[:,9])\n",
"plt.xlabel('Altitude (m)')\n",
"plt.ylabel('$p/p_0$')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On observe donc l'évolution de la pression atmosphérique en fonction de l'altitude. Celle-ci diminue pour atteindre 1/4 de sa valeur standard à 10000 m d'altitude !\n",
"\n",
"On peut également tracer l'évolution de la temprérature:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.plot(data[:,0],data[:,2])\n",
"plt.xlabel('Altitude (m)')\n",
"plt.ylabel('$T$ (K)')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On observe un palier à partir de 11 km.\n",
"\n",
"Enfin on trace l'évolution de la masse volumique:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.plot(data[:,0],data[:,4])\n",
"plt.xlabel('Altitude (m)')\n",
"plt.ylabel('Masse volumique')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# L'atmosphère est-elle parfaite ?\n",
"\n",
"En utilisant les données enregistrées, on peut se demander si la pression, la température et la masse volumique de l'air vérifie la relation des gaz parfaits à toutes les altitudes.\n",
"\n",
"Pour cela on compare le rapport $\\dfrac{p}{p_0}$ au rapport $\\dfrac{\\rho T}{\\rho_0 T_0}$:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.plot(data[:,0],data[:,9],label='Atmosphere')\n",
"plt.plot(data[::8,0],data[::8,4]*data[::8,2]/(data[0,4]*data[0,2]),\"o\",label='Gaz parfait')\n",
"plt.xlabel('Altitude (m)')\n",
"plt.ylabel('$p/p_0$')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Effectivement, les deux courbent étant superposées, on retrouve bien la loi des gaz parfaits."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Et la viscosité ?\n",
"\n",
"La loi de Sutherland donne l'évolution de la viscosité en fonction de la température:\n",
"\n",
"$$\n",
"\\dfrac{\\mu}{\\mu_0}=\\sqrt{\\dfrac{T}{T_0}}\\dfrac{1+\\dfrac{114}{T_0}}{1+\\dfrac{114}{T}}\n",
"$$\n",
"\n",
"Ainsi on peut comparer avec les valeurs ballons:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.plot(data[:,0],data[:,5]*data[:,7],label='Atmosphere')\n",
"plt.plot(data[::8,0],np.sqrt(data[::8,2]/288.15)*(1+(114/288.15))/(1+(114/data[::8,2])),\"o\",label='Sutherland')\n",
"plt.xlabel('Altitude (m)')\n",
"plt.ylabel('$p/p_0$')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L'évolution de la viscosité dans l'atmosphère verifie donc bien la loi de Sutherland.\n",
"\n",
"\n",
"# Conclusion\n",
"\n",
"Entrainez - vous à manipuler ce notebook sur le serveur Jupyter. N'hesitez pas à modifier les valeurs, ajouter de nouvelles cellules. On pourra par exemple:\n",
"* Verifier que la vitesse du son evolue bien comme $\\sqrt{T}$ et en déduire le $\\gamma$ de l'air.\n",
"* Comparer le nombre volumique et la masse volumique\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n"
],
"text/plain": [
""
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.core.display import HTML\n",
"style=open('notebooks.css', \"r\").read()\n",
"HTML(style)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"