Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
| Download
Project: Public Code
Views: 82

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 22 sous parties
  1. La définition du milieu,
  2. 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 à 22 coordonnées xx et yy (la profondeur), qui à chaque position associe une densité. Dans notre modèle, cette densité indiquera la vitesse v(x,y)v(x,y) de propagation des ondes en ce point. Par exemple, pour un terrain parfaitement homogène, on définira une fonction comme ci-après :

def milieu_homogene(x,y): #milieu parfaitement homogène return 1.0 ︠f74a894f-6062-4011-b0fd-e689af6a6fdbi︠ %html <p> La fonction ci-dessus renvoie pour toutes positions la valeur constante $1$, 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é. </p> <p> <strong>Écrire une fonction qui définit un milieu contenant $3$ couches dans lesquelles nous avons trois vitesses constantes différentes (prendre les vitesses $0.75$, $0.35$ et $0.1$ et des couches de largeurs $\frac{1}{3}$). La vitesse varie donc uniquement selon la profondeur $y$. </p>

La fonction ci-dessus renvoie pour toutes positions la valeur constante 11, 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 33 couches dans lesquelles nous avons trois vitesses constantes différentes (prendre les vitesses 0.750.75, 0.350.35 et 0.10.1 et des couches de largeurs 13\frac{1}{3}). La vitesse varie donc uniquement selon la profondeur yy.

︠bfe2fee3-1f6e-4254-b6d6-4d3ad2c279c4i︠ %html <p> <strong>Écrire une fonction qui prend en argument un milieu (c'est à dire une fonction) et qui renvoie l'affichage du milieu considéré. Utiliser pour cela la commande <code>density_plot</code></strong> </p> <p> <strong> Remarque : </strong>À l'aide de l'option <code>cmap</code>, vous pouvez donner un meilleur aspect à votre graphique. Vous pouvez également vous amuser avec la commande <code>sorted(colormaps)</code> pour trouver tous les choix possibles de <code>cmap</code>. </p>

Écrire une fonction qui prend en argument un milieu (c'est à dire une fonction) et qui renvoie l'affichage du milieu considéré. Utiliser pour cela la commande density_plot

Remarque : À l'aide de l'option cmap, vous pouvez donner un meilleur aspect à votre graphique. Vous pouvez également vous amuser avec la commande sorted(colormaps) pour trouver tous les choix possibles de cmap.

︠bf874d62-c922-4248-a4ea-242579772ecai︠ %html <p> 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é par l'obstacle.<br/> <strong>À l'aide des milieux stratifié et homogène défini ci-dessus, définisser $2$ nouveaux milieux contenant chacun un obstacle (de la forme de votre choix). Afficher les avec la fonction définie précédemment.</strong> </p>

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é par l'obstacle.
À l'aide des milieux stratifié et homogène défini ci-dessus, définisser 22 nouveaux milieux contenant chacun un obstacle (de la forme de votre choix). Afficher les avec la fonction définie précédemment.

︠3b83c61b-fa5c-45a4-93db-1e96b2ca57fbi︠ %html <h3> La propagation d'une ondes </h3> <p>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 : $$(x(t),y(t)) = r(t) (cos(\theta),sin(\theta))$$ où l'angle $\theta$ ne dépend pas de $t$ et $r(t)$ est une distance postivie $r(t)>0$. Comme les ondes se propagent dans le sol, donc vers le bas, on supposera $\theta \in [\pi, 2\pi]$ (ainsi, la coordonnée $y$ est toujours négative). </p> <p> Dans une direction $\theta \in [\pi,2\pi]$ fixée, on suppose que la vitesse $v$ vérifie $$r'(t) = v\left(r(t)cos(\theta), r(t)sin(\theta) \right).$$</p> </p> <p> <strong>Étant donnée un angle $\theta \in [\pi,2\pi]$ fixé et un <em>milieu</em>, écrire une fonction qui renvoie $f(r) = v(r cos(\theta), r sin(\theta))$. On rappelle que la vitesse en un point $(x,y)$ est définie par la densité du milieu en ce point.</strong> </p>

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 : (x(t),y(t))=r(t)(cos(θ),sin(θ))(x(t),y(t)) = r(t) (cos(\theta),sin(\theta)) où l'angle θ\theta ne dépend pas de tt et r(t)r(t) est une distance postivie r(t)>0r(t)>0. Comme les ondes se propagent dans le sol, donc vers le bas, on supposera θ[π,2π]\theta \in [\pi, 2\pi] (ainsi, la coordonnée yy est toujours négative).

Dans une direction θ[π,2π]\theta \in [\pi,2\pi] fixée, on suppose que la vitesse vv vérifie r(t)=v(r(t)cos(θ),r(t)sin(θ)).r'(t) = v\left(r(t)cos(\theta), r(t)sin(\theta) \right).

Étant donnée un angle θ[π,2π]\theta \in [\pi,2\pi] fixé et un milieu, écrire une fonction qui renvoie f(r)=v(rcos(θ),rsin(θ))f(r) = v(r cos(\theta), r sin(\theta)). On rappelle que la vitesse en un point (x,y)(x,y) est définie par la densité du milieu en ce point.

︠053a5ed4-6c3c-41ef-a966-096e4b30d1a2i︠ %html <p> L'équation différentielle $r'(t) = f(r) (= v(r(t)cos(\theta),r(t) sin(\theta)))$ ne peut pas être résolue exactement, car la fonction $f$ 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 : $$\dfrac{r(t_{n+1}) - r(t_{n})}{\delta_t} = f(r(t_n))$$ où $t_n = n \delta_t$, et $\delta_t>0$ est un paramètre petit. L'idée de la méthode est de remplacer la dérivée $r'(t)$ par un taux d'accroissement. Remarquer que quand $\delta_t \rightarrow 0$, ce taux d'accroissement tend vers la dérivée $r'(t_n)$. Dans l'expression ci-dessus, on peut isoler $r(t_{n+1})$ comme suit : $$r(t_{n+1}) = \delta_t f(r(t_n)) + r(t_{n}).$$ Étant donnée $r(t_0=0)=0$, on peut calculer la suite des $r(t_{n})$ avec l'expression ci-dessus jusque $t_N = T$, où $T$ est un paramètre choisi. </p> <p> <strong>À l'aide de la méthode d'euler explicite, écrire une fonction prenant en paramètre la fonction $f$ et le temps $T$, et qui résout l'équation $r'(t) = f(r)$. Cette fonction devra renvoyer la liste des solutions $r(t_n)$ calculées à chaque temps $t_n = n\delta_t$, où $\delta_t = 0.1$, jusque $t_N = T$.</strong> </p>

L'équation différentielle r(t)=f(r)(=v(r(t)cos(θ),r(t)sin(θ)))r'(t) = f(r) (= v(r(t)cos(\theta),r(t) sin(\theta))) ne peut pas être résolue exactement, car la fonction ff 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 : r(tn+1)r(tn)δt=f(r(tn))\dfrac{r(t_{n+1}) - r(t_{n})}{\delta_t} = f(r(t_n))tn=nδtt_n = n \delta_t, et δt>0\delta_t>0 est un paramètre petit. L'idée de la méthode est de remplacer la dérivée r(t)r'(t) par un taux d'accroissement. Remarquer que quand δt0\delta_t \rightarrow 0, ce taux d'accroissement tend vers la dérivée r(tn)r'(t_n). Dans l'expression ci-dessus, on peut isoler r(tn+1)r(t_{n+1}) comme suit : r(tn+1)=δtf(r(tn))+r(tn).r(t_{n+1}) = \delta_t f(r(t_n)) + r(t_{n}). Étant donnée r(t0=0)=0r(t_0=0)=0, on peut calculer la suite des r(tn)r(t_{n}) avec l'expression ci-dessus jusque tN=Tt_N = T, où TT est un paramètre choisi.

À l'aide de la méthode d'euler explicite, écrire une fonction prenant en paramètre la fonction ff et le temps TT, et qui résout l'équation r(t)=f(r)r'(t) = f(r). Cette fonction devra renvoyer la liste des solutions r(tn)r(t_n) calculées à chaque temps tn=nδtt_n = n\delta_t, où δt=0.1\delta_t = 0.1, jusque tN=Tt_N = T.

︠04fe6720-9b17-457c-b173-003640e75426i︠ %html <p> On considère un émetteur placé sur le sol en coordonnée $(0,0)$. Il émet une onde qui va se propager dans toutes les directions $\theta \in [\pi,2\pi]$. Avec ce que nous avons développé jusqu'ici, le but est de représenter l'onde se propageant dans un milieu choisi. </p> <p> <strong> Écrire une fonction qui prend en argument un <em>milieu</em> et un temps $T$ 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).</strong> </p> <p> <strong>Indication :</strong> Pour calculer la solution dans 'toutes' les directions $\theta$, considérer simplement $50$ valeurs de $\theta$ reparties équitablement dans l'intervalle $[\pi,2\pi]$. </p>

On considère un émetteur placé sur le sol en coordonnée (0,0)(0,0). Il émet une onde qui va se propager dans toutes les directions θ[π,2π]\theta \in [\pi,2\pi]. 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 TT 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 θ\theta, considérer simplement 5050 valeurs de θ\theta reparties équitablement dans l'intervalle [π,2π][\pi,2\pi].