{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "Ce premier code permet de visualiser 2 choses :\n", "* le déplacement d'une onde interne à une profondeur donnée, où chaque courbe correspond à la courbe précédente au temps t+dt avec dt = 50s\n", "* à un temps donné, des ondes internes à différentes profondeurs\n", "\n" ], "metadata": { "id": "ZXZhbLNTIvn9" } }, { "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "\n", "l=1\n", "m=1\n", "Um=1\n", "N=0.007\n", "w=np.sqrt(N**2*(l**2)/(l**2+m**2))\n", "\n", "\n", "x=np.arange(0,10,0.1)\n", "z=np.arange(0,10,0.1)\n", "\n", "def u(temps):\n", " u=np.zeros((len(x),len(z)))\n", " for i in range(len(x)):\n", " for j in range(len(z)):\n", " u[i,j]=-l/(l**2+m**2)*m*Um*np.cos(l*x[i]+m*z[j]-w*temps)\n", " return u\n", "\n", "\n", "\n", "plt.figure(1)\n", "for i in range(5):\n", " p=i*50\n", " plt.plot(x,u(p)[:,0])\n", "plt.title('Déplacement d une onde interne à une profondeur fixe')\n", "\n", "\n", "\n", "plt.figure(2)\n", "for i in range(10):\n", " p=i*10\n", " plt.plot(x,u(0)[:,p]+2*z[p])\n", "plt.title('Ondes internes à différentes profondeur')\n", "\n", "plt.show()\n" ], "metadata": { "id": "-SyE3m-8GqO4" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "L'objectif de ce code est de tracer un profil de densité linéaire pour une tranche d'océan de la surface jusqu'à la profondeur z=1000m" ], "metadata": { "id": "-u5Cf838JpLF" } }, { "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "\n", "def profil(z):\n", " rho=1029+0.021*z\n", " return rho\n", "\n", "plt.figure\n", "plt.axis([0, 1050, 1052.5, 1027.5])\n", "plt.plot(z,profil(z))\n", "plt.xlabel('Profondeur')\n", "plt.ylabel('Densité')\n", "plt.title('Profil de densité en fonction de la profondeur')\n", "plt.show()" ], "metadata": { "id": "659pRZccHXYi" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "Ce code permet de visualiser le déplacement l'onde au cours du temps. Pour changer la profondeur à laquelle on souhaite la visualiser, il suffit de choisir le paramètre z (entre 0 et 1000 m). La vitesse tracée est sinusoïdale selon les équations décrites dans le h5p. Afin d'accentuer les différences de vitesses entre les deux animations du h5p, le pas de temps a été modifié entre les deux animations. Cela accentue la différence de vitesse qui était déjà existente pour un pas de temps similaire." ], "metadata": { "id": "etb1IuKvX0QE" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "BnZo1TzeGnET" }, "outputs": [], "source": [ "import matplotlib.animation as animation\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from IPython import display\n", "\n", "\n", "rho_init=1050\n", "l=2\n", "k=2\n", "Um=1\n", "alpha=0.21\n", "dt=1\n", "\n", "x=np.arange(0,10,0.1)\n", "z=np.arange(0,1000,10)\n", "\n", "def N(alt):\n", " N=np.sqrt((9.81/(rho_init-alpha*alt))*alpha)\n", " return N\n", "\n", "\n", "\n", "def u(t):\n", " u=np.zeros((len(x),len(z)))\n", " for i in range(len(x)):\n", " for j in range(len(z)):\n", " w=np.sqrt((N(z[j]))**2*l**2/(l**2+k**2))\n", " u[i,j]=-l/(l**2)*k*Um*np.cos(l*x[i]+k*z[j]-w*t)\n", " return u\n", "\n", "\n", "\n", "fig = plt.figure() # initialise la figure\n", "line, = plt.plot([], [])\n", "plt.xlim(0, 10)\n", "plt.ylim(-5,5)\n", "\n", "\n", "\n", "def init():\n", " line.set_data([], [])\n", " return line,\n", "\n", "\n", "\n", "\n", "def animate(i):\n", " z=1000 #on choisit ici la profondeur en m à laquelle on souhaite visualiser l'onde\n", " t = i * dt\n", " y = Um*np.cos(l*x+k*z-(np.sqrt(N(z)**2*l**2/(l**2+k**2))*t))\n", " line.set_data(x,y)\n", " return line,\n", "\n", "anim= animation.FuncAnimation(fig, animate, init_func=init, frames=1000,interval=0.5, blit=True, repeat=False)\n", "\n", "\n", "plt.show()" ] } ] }