TP sur un problème de géologie.
Le but de ce TP est d'aborder un problème de "géologie". Nous allons modéliser la propagation d'un front d'onde dans le sol. La difficulté sera de tenir compte des inhomogénéités du terrain pour décrire la propagation de l'onde. Ce TP se décomposera en sous parties- La définition du milieu,
- et le calculs effectifs de la propagation de l'onde.
La définition du milieu
Le terrain que nous allons chercher à modéliser sera représentée par une fonction à coordonnées et (la profondeur), qui à chaque position associe une densité. Dans notre modèle, cette densité indiquera la vitesse de propagation des ondes en ce point. On supposera que la vitesse varie entre 0. (aucune propagation) et 1. (vitesse maximale). Par exemple, pour un terrain parfaitement homogène, on définira une fonction comme ci-après :
La fonction ci-dessus renvoie pour toutes positions la valeur constante , donc dans tout le milieu l'onde se propage à vitesse constante. Cependant, ce modèle est assez peu réaliste car le sol est généralement structuré par couches. On parle de milieu stratifié.
Écrire une fonction qui définit un milieu contenant couches dans lesquelles nous avons trois vitesses constantes différentes. On supposera que varie entre 0 et -1, on découpera l'espace en trois couches égales avec les vitesses : 0.35, 0.75 et 1. La vitesse varie donc uniquement selon la profondeur .
Il est possible d'afficher la valeur de la vitesse dans le milieu à l'aide la fonction density_plot. Si on exécute la fonction sur le milieu homogène on obtient un restangle uni.
Utilisez density_plot
pour afficher la densité de votre milieu à trois couches.
La fonction density_plot peut prendre un argument cmap qui permet de faire varier les couleurs utilisées. cmap peut prendre les valeurs suivantes.
Testez différentes valeurs pour cmap pour afficher votre densité
Une manière de définir un obstacle est de considérer une zone dans laquelle la vitesse de l'onde est nulle. Dans ce cas, l'onde ne se propage plus et est arrêtée par l'obstacle.
Ecrivez deux fonctions obstacle_rectangle
et obstacle_rond
qui prennent en argument x
et y
et retournent True
si le point est à l'intérieur de l'obstacle et et False
sinon. Les obstacles doivent être un rectangle et un rond, la taille et la position sont laissées libres.
Ecrivez quatre fonctions qui correspondent aux quatre milieux suivants :
milieu homogène avec obsctacle rectangle
milieu homogène avec obsctale rond
milieu 3 couches avec obstacle rectangle
milieu 3 couches avec obstacle rond
La vitesse doit être de 0 à l'intérieur de l'obstacle et suivre la règle habituelle du milieu sinon. Pensez à utiliser les fonctions écrites précédemment !!
Affichez chaque milieu avec density_plot
La propagation d'une ondes
Nous allons maintenant modéliser la propagation d'une onde dans nos différents domaines. Pour simplifier, on supposera que la position du front d'onde est décrite par : où l'angle ne dépend pas de et est une distance postivie . Comme les ondes se propagent dans le sol, donc vers le bas, on supposera (ainsi, la coordonnée est toujours négative).
Dans une direction fixée, on suppose que la vitesse vérifie
Ecrire une fonction vitesse
qui prend en paramètre un angle theta, un milieu (sous la forme de fonction python) et un rayon r
et qui retourne la vitesse au point donné.
Soit la vitesse au rayon pour un angle et un milieu donné. L'équation différentielle ne peut pas être résolue exactement, car la fonction est a priori quelconque. Nous allons donc utiliser une méthode numérique de résolution. L'idée est d'utiliser l'algorithme suivant : où , et est un paramètre petit. L'idée de la méthode est de remplacer la dérivée par un taux d'accroissement. Remarquer que quand , ce taux d'accroissement tend vers la dérivée . Dans l'expression ci-dessus, on peut isoler comme suit : Étant donnée , on peut calculer la suite des avec l'expression ci-dessus jusque , où est un paramètre choisi.
À l'aide de la méthode décrite (méthode d'Euler explicite), écrire une fonction prenant en paramètre le milieu, l'angle theta, le temps et le pas et qui retourne la liste des valeurs jusqu'à . (Pour les tests, on choisira et .)
On considère un émetteur placé sur le sol en coordonnée . Il émet une onde qui va se propager dans toutes les directions . Avec ce que nous avons développé jusqu'ici, le but est de représenter l'onde se propageant dans un milieu choisi.
Écrire une fonction qui prend en argument un milieu et un temps de simulation, et qui renvoie une animation du front d'onde se propageant dans le milieu considéré (tester avec les différents milieux définis).
Indication : Pour calculer la solution dans 'toutes' les directions , considérer simplement valeurs de reparties équitablement dans l'intervalle .