{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 1 - Ondas sísmicas\n", "\n", "Vamos explorar o que são as ondas sísmicas P e S e e como se comportam, tanto em meios homogêneos como quando há uma interface entre dois meios. Para isso, vamos utilizar as simulações de ondas da biblioteca [Fatiando a Terra](http://www.fatiando.org). Essas simulações utilizam o [método de diferenças finitas](http://en.wikipedia.org/wiki/Finite_difference_method) para calcular soluções da equação da onda." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objetivos\n", "\n", "* Visualizar como é a propagação de ondas elásticas P e S em meios homogênios\n", "* Observar o que acontece quando ondas P e S incidem sobre uma interface entre dois meios\n", "* Entender os conceitos de raios e frentes de onda" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Questão para entregar\n", "\n", "
\n", "Descreva como é a propagação das ondas P e S e os fatores que diferenciam uma da outra. Fale também sobre o que acontece quando uma onda incide em uma interface que separa dois meios.\n", "
\n", "\n", "Lembre-se de colocar **seu nome** e a **data** em sua resposta. A resposta pode ter no **máximo 1 página** (não uma folha).\n", "\n", "**As simulações abaixo foram feitas para te ajudar a responder a questão.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Instruções\n", "\n", "Esse documento é um [Jupyter notebook](http://jupyter.org/), um documento interativo que mistura texto (como esse), código (como abaixo), e o resultado de executar o código (números, texto, figuras, videos, etc).\n", "\n", "O notebook te fornecerá exemplos interativos que trabalham os temas abordados no questionário. Utilize esses exemplos para responder as perguntas.\n", "\n", "As células com números ao lado, como `In [1]:`, são código [Python](http://python.org/). Algumas dessas células não produzem resultado e servem de preparação para os exemplos interativos. Outras, produzem gráficos interativos. **Você deve executar todas as células, uma de cada vez**, mesmo as que não produzem gráficos.\n", "\n", "**Para executar uma célula**, clique em cima dela e aperte `Shift + Enter`. O foco (contorno verde ou cinza em torno da célula) deverá passar para a célula abaixo. Para rodá-la, aperte `Shift + Enter` novamente e assim por diante. Você pode executar células de texto que não acontecerá nada." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup\n", "\n", "Rode as células abaixo para carregar os módulos necessários para essa prática." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "from __future__ import division, print_function\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from fatiando.seismic import RickerWavelet, GaussianWavelet, FDElasticPSV, FDAcoustic2D" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Propagração de uma onda P\n", "\n", "Vamos simular uma onda P (esqueçam as ondas S por enquanto). Primeiro vamos ver como ela se comporta em um meio homogêneo, sem camadas. \n", "\n", "Rode a célula abaixo para criar um modelo da subsuperfície homogêneo. Para não termos ondas S, vamos considerar que estamos em um fluido, como a água." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "shape = (300, 400)\n", "spacing = 5\n", "extent = [0, shape[1]*spacing, shape[0]*spacing, 0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "velocity = np.zeros(shape, dtype='float32') + 1500 # m/s\n", "density = np.zeros(shape, dtype='float32') + 1000 # kg/m³" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Agora vamos criar o nosso simulador de ondas P com uma fonte explosiva na superfície do nosso modelo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pwave = FDAcoustic2D(velocity, density, spacing=spacing)\n", "pwave.add_point_source((0, shape[1]//2), RickerWavelet(1, 60))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Agora que temos nossa simulação pronta, rode a célcula abaixo para avançar a simulação do tempo 0 até 400 passos no tempo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pwave.run(400)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Quando a barra acima encher, rode a célula abaixo para gerar uma animação da propagação da onda. Isso pode demorar um pouco. A parte de cima da figura é a superfície." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pwave.animate(every=10, embed=True, dpi=50, cutoff=0.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rode a próxima célula para explorar fotos de cada etapa da simulação, uma de cada vez." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pwave.explore(every=20, cutoff=0.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Para pensar\n", "\n", "* Como varia a amplitude da onda ao longo do tempo? \n", "* Por que isso acontece?\n", "* Se nossa simulação fosse num espaço infinito e a rodarmos por um tempo infinito, a onda continuaria existindo e se propagando para sempre? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Nota\n", "\n", "Se quiser continuar a simulação e avançá-la mais no tempo, rode novamente a célula `pwave.run(400)` para avançar mais 400 iterações. Depois, rode novamente a célula que cria a animação e ela será atualizada." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Onda P incidindo em uma interface (fluido)\n", "\n", "Agora que vocês visualizaram como uma onda P se propaga, vamos ver o que acontece quando a subsuperfície contem duas camadas com velocidades e densidades diferentes. No nosso caso de fluidos, poderiam ser duas camadas de água com temperatuda e salinidade diferentes, fazendo com que a velocidade da onda P e a densidade sejam diferentes.\n", "\n", "Vamos fazer um modelo com a camada de baixo mais densa e com velocidade maior. A interface está localizada a 500m de profundidade." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "twolayer_density = np.zeros(shape, dtype='float32') + 1000\n", "twolayer_velocity = np.zeros(shape, dtype='float32') + 1500\n", "twolayer_density[100:,:] = 1500\n", "twolayer_velocity[100:,:] = 2000" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Novamente, crie a simulação adicione uma fonte explosiva no topo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pwave2 = FDAcoustic2D(twolayer_velocity, twolayer_density, spacing=spacing, taper=0.005)\n", "pwave2.add_point_source((0, shape[1]//2), RickerWavelet(1, 60))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rode a simulação por 600 iterações." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pwave2.run(700)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Gere a animação abaixo. O que acontece quando a frente de onda chega na interface?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pwave2.animate(every=10, embed=True, dpi=50, cutoff=0.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rode abaixo para ver cada tempo separado, com calma." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pwave2.explore(every=20, cutoff=0.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Para pensar\n", "\n", "* A proporção de energia refletida e refratada é igual?\n", "* A curvatura da frente de onda refratada é a mesma que a original?\n", "* E a da refletida?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ondas P e S em meios sólidos\n", "\n", "Vamos fazer agora uma simulação mais realista que inclui tanto ondas P quanto ondas S propagando em um meio sólido.\n", "\n", "Para isso, precisamos definir qual é a velocidade de cada um dos tipos de onda no meio. Note que a onda P é sempre mais rápida que a S." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "density_solid = np.zeros(shape, dtype='float32') + 2200\n", "vs_solid = np.zeros(shape, dtype='float32') + 3000\n", "vp_solid = np.zeros(shape, dtype='float32') + 4000" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rode a célula abaixo para criar a simulação de ondas P e S. Dessa vez, **não vamos usar uma fonte explosiva**. A fonte será uma **falha reversa com mergulho de 45 graus**. O epicentro será localizada em profundidade a 750m." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "ps_wave = FDElasticPSV(vp_solid, vs_solid, density_solid, spacing=spacing)\n", "ps_wave.add_point_source((shape[0]//2, shape[1]//2), dip=45, wavelet=GaussianWavelet(-1, 100))\n", "ps_wave.add_point_source((shape[0]//2 + 1, shape[1]//2 - 1), dip=45, wavelet=GaussianWavelet(1, 100))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Agora, avance a simulação 400 iterações no tempo. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "ps_wave.run(400)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "E gere a animação." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "ps_wave.animate(every=10, plottype=['vectors', 'wavefield'], cutoff=5e-7, scale=5e7, \n", " dpi=80, fps=6, embed=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note que essa é diferente da outra. Agora, há vetores na imagem além das frentes de onda coloridas. **Os vetores representam a direção e intensidade do deslocamento de cada ponto no meio**. Os pontinhos pretos são vetores com tamanho zero. Note que no começo da animação aparecem vetorres bem grande no centro representando a fonte da onda." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Novamente, use a célula abaixo para ver cada etapa da simulação separadamente." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "ps_wave.explore(every=20, plottype=['vectors', 'wavefield'], scale=5e7, cutoff=5e-7)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Para pensar\n", "\n", "* Tente achar as ondas P e as S na simulação. Dica: use os vetores de deslocamento.\n", "* Qual frente de onda é mais rápida? \n", "* Como é a direção de vibração das ondas P? Ela é uniforme para todas as frentes de onda? Tente explicar esse comportamento." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Onda P incidindo em uma interface (sólido)\n", "\n", "Agora que vocês acharam as ondas P e S, vamos fazer a simulação completa do que acontece quando uma onda P encontra uma interface em um meio sólido.\n", "\n", "Rode a célula abaixo para criar um modelo com dois meios com velocidades diferentes. A interface entre os dois meios está a 600m." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "density_twosolid = np.zeros(shape, dtype='float32') + 1800\n", "vs_twosolid = np.zeros(shape, dtype='float32') + 2000\n", "vp_twosolid = np.zeros(shape, dtype='float32') + 3000\n", "l = 120\n", "density_twosolid[l:, :] = 2300\n", "vs_twosolid[l:, :] = 3000\n", "vp_twosolid[l:, :] = 4000" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A simulação que vamos fazer agora usa uma **fonte explosiva**. Esse tipo de fonte gera **somente ondas P**. Vamos ver o que acontece quando essa onda encontra a interface. Para variar um pouco, vamos colocar a fonte no fundo do nosso modelo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ps_twolayer = FDElasticPSV(vp_twosolid, vs_twosolid, density_twosolid, spacing, taper=0.004)\n", "ps_twolayer.add_blast_source((3*shape[0]//5, shape[1]//2), GaussianWavelet(1, 150))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Agora, avance a simulação." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "ps_twolayer.run(600)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "E gere a animação. Note que no começo há somente ondas P (pergunta, como você sabe que são só ondas P?)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "ps_twolayer.animate(every=10, plottype=['vectors', 'wavefield'], every_particle=6, \n", " cutoff=5e-7, scale=3e7, dpi=80, fps=6, embed=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "ps_twolayer.explore(every=20, plottype=['vectors', 'wavefield'], \n", " cutoff=5e-7, scale=3e7, every_particle=6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Para pensar\n", "\n", "* O que acontece quando a onda P incide na interface?\n", "* A curvatura das frentes de onda refletidas e refratadas são iguais?\n", "* Avance a simulação no tempo novamente e atualize a animação. O que acontece quando a onda P reflete na superfície? E quando a onda S reflete?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## License and information\n", "\n", "**Course website**: https://github.com/leouieda/geofisica2\n", "\n", "**Note**: This notebook is part of the course \"Geofísica 2\" of Geology program of the \n", "[Universidade do Estado do Rio de Janeiro](http://www.uerj.br/). \n", "All content can be freely used and adapted under the terms of the \n", "[Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/).\n", "\n", "![Creative Commons License](https://i.creativecommons.org/l/by/4.0/88x31.png)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 }