{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 4 - Sísmica de refração\n", "\n", "Na aula anterior ([3. Refração crítica](3-refracao-critica.ipynb)), vimos o que acontece quando uma onda P incide sobre uma interface no ângulo crítico. A onda que refrata a 90° possui algumas características diferentes das ondas refletida e direta. A sísmica de refração é um método que utiliza essa características para estimar a profundidade da interface e as velocidades dos meios.\n", "\n", "Utilizaremos 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 seria um dado sísmico de refração (simulado).\n", "* Observar os diversos caminhos que a onda faz para chegar nos receptores e como essas chegadas aparecem nos dados.\n", "* Aprender como usar as medições de primeira chegada para calcular a profundidade da interface e as velocidades." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Questão para entregar\n", "\n", "
\n", "Explique como funciona a sísmica de refração.\n", "

\n", "Sua resposta deve conter no mínimo:\n", "

\n", "\n", "
\n", "\n", "### Regras para a resposta\n", "\n", "* Coloque **nome, data e o número da prática** em sua resposta. \n", "* A resposta pode ter no **máximo 1 página** (não uma folha).\n", "* **Execute o notebook** antes de responder. As simulações abaixo foram feitas para te ajudar.\n", "* **Pense e organize** sua resposta andtes de começar a escrever." ] }, { "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 matplotlib.animation import FuncAnimation\n", "import ipywidgets as ipw\n", "from fatiando.seismic import RickerWavelet, FDAcoustic2D\n", "from fatiando.vis import anim_to_html" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Geração de dados sintéticos\n", "\n", "Vamos utilizar as simulações de onda P para gerar dados sintéticos. Dessa vez também vamos ignorar as ondas S para não complicar a vida mais do que o necessário. \n", "\n", "O nosso modelo será uma interface plana separando a crosta do manto (a **Moho**)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "shape = (300, 1000)\n", "spacing = 400\n", "extent = [0, shape[1]*spacing, shape[0]*spacing, 0]\n", "density = np.zeros(shape, dtype='float32') + 2700\n", "velocity = np.zeros(shape, dtype='float32') + 6000\n", "interface = 100\n", "density[interface:,:] = 3200\n", "velocity[interface:,:] = 8000" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A fonte será uma explosão na superfície com as seguintes coordenadas:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "fonte = (0, 100)\n", "print('Coordenadas da fonte:')\n", "print(' x = {} m'.format(fonte[1]*spacing))\n", "print(' z = {} m'.format(fonte[0]*spacing))" ] }, { "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": [ "simul = FDAcoustic2D(velocity, density, spacing=spacing, taper=0.003, padding=80)\n", "simul.add_point_source(fonte, RickerWavelet(1, 4))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "simul.run(3000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rode a célula abaixo para gerar a animação." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "simul.animate(every=30, embed=True, dpi=60, cutoff=500, fps=6, cmap='Greys')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Agora vamos fazer a aquisição dos dados usando receptores nas posições mostradas abaixo. Cada receptor irá medir a movimentação do chão ao longo do tempo.\n", "\n", "* Os triângulo azuis são os receptores.\n", "* A estrela amarela é a fonte." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "receptores = np.arange(fonte[1] + 50, shape[1], 10, dtype='int')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "fig = plt.figure(figsize=(12, 4))\n", "ax = plt.subplot(111)\n", "ax.axison = False\n", "ax.imshow(simul[1000], extent=extent, cmap='Greys', vmin=-500, vmax=500)\n", "ax.plot(fonte[1]*spacing, 0, '*y', markersize=15)\n", "ax.plot(receptores*spacing, np.zeros_like(receptores), 'vb', markersize=10)\n", "ax.hlines(interface*spacing, 0, shape[1]*spacing)\n", "ax.set_xlim(0, shape[1]*spacing)\n", "ax.set_ylim(shape[0]*spacing, -10*spacing)\n", "ax.set_ylabel('Profundidade (m)')\n", "ax.set_xlabel(u'Distância (m)')\n", "plt.tight_layout(pad=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cada receptor irá medir a movimentação do solo. Podemos plotar essa movimentação como função do tempo para cada receptor. Se colocarmos o gráfico de cada receptor um ao lado do outro, formamos uma imagem. A cor branca significa movimentação para baixo e a cor preta movimentação para cima." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A figura interativa abaixo permite que você controle os coeficientes linear e angular de uma reta." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dados = simul[:, 0, receptores]\n", "times = np.linspace(0, simul.dt*simul.simsize, simul.simsize)\n", "\n", "def reta(linear, angular):\n", " x = receptores*spacing\n", " y_reta = linear + angular*x\n", " plt.figure(figsize=(12, 8))\n", " ax = plt.subplot(111)\n", " ax.pcolormesh(x, times, dados, cmap='Greys', vmin=-50, vmax=50)\n", " ax.plot(x, y_reta, '-b', linewidth=2)\n", " ax.set_xlim(x.min(), x.max())\n", " ax.set_ylim(0, times.max())\n", " ax.set_ylabel('tempo (s)')\n", " ax.set_xlabel(u'Distância (m)')\n", "\n", "ipw.interactive(reta, \n", " linear=ipw.FloatSlider(min=0, max=times.max(), step=0.5, value=5, description='coef. linear (s)'),\n", " angular=ipw.FloatSlider(min=-0.0005, max=0.0005, step=0.00001, value=0.0001,\n", " readout_format='.6f', description='coef. angular (s/m)'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Para pensar\n", "\n", "* Como aparecem nos dados as ondas direta e refratada no ângulo crítico?\n", "* Tente encontrar o ponto onde a refrata ultrapassa a direta.\n", "* Você pode usar a reta azul para achar os coeficientes angular (em s/m) e linear (em s) de eventos no dado.\n", "* Tente usar os valores obtidos com a reta azul para calcular V1 (de cima), V2 (de baixo) e a profundidade da interface (Moho)." ] }, { "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": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "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" }, "widgets": { "state": { "07bb18f03c5a41dc9ed6a81d8c71cf5d": { "views": [ { "cell_index": 20 } ] } }, "version": "1.2.0" } }, "nbformat": 4, "nbformat_minor": 0 }