{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 8 - Sísmica de reflexão: Resolução e armadilhas na interpretação\n", "\n", "Nessa prática, vamos simular diversos cenários geológicos e prever como seria uma sessão sísmica já empilhada e em tempo. Você vai poder desenhar seus modelos em um programa estilo \"MS Paint\", designar velocidades para cada litologia e ver o resultado esperado da sísmica para cada situação.\n", "\n", "Exemplos de modelos e a inspiração para essa aula vieram das aulas de [\"Pitfalls in Seismic Interpretation\"](http://pages.geo.wvu.edu/~wilson/geol554.htm) do [Prof. Thomas H. Wilson](http://pages.geo.wvu.edu/~wilson/).\n", "\n", "Recomendo também a leitura do texto [Tuning Geology](https://www.agilegeoscience.com/blog/2011/7/8/tuning-geology.html) do Matt Hall." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objetivos\n", "\n", "* Familiarizar como o processo de modelagem direta para testar hipóteses\n", "* Observar o efeito de anomalias estáticas e de velocidade no dado sísmico\n", "* Aprender sobre situações que geralmente induzem a erros na interpretação " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Questão para entregar\n", "\n", "
\n", "\n", "Explique os detalhes aos quais devemos nos atentar quando interpretando uma sísmica em tempo.\n", "\n", "
\n", "\n", "**Dicas**:\n", "\n", "* Fale sobre o efeito da resolução quando interpretamos camadas finas.\n", "* Como as velocidades podem afetar a forma dos horizontes?\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": true }, "outputs": [], "source": [ "%matplotlib inline\n", "from __future__ import division, print_function\n", "import math\n", "from PIL import Image\n", "import numpy as np\n", "import scipy.misc\n", "import matplotlib.pyplot as plt\n", "import ipywidgets as ipw\n", "from fatiando.seismic import conv\n", "from fatiando.vis.mpl import seismic_image, seismic_wiggle" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Resolução vertical e camadas finas\n", "\n", "Vimos em aula que a resolução vertical máxima do dado sísmico é aproximadamente $\\lambda/4$ e\n", "\n", "$$\\lambda = \\frac{V}{f}$$\n", "\n", "Vamos explorar agora como isso afeta a nossa interpretação de uma camada fina. No exemplo abaixo, podemos variar a espessura e velocidade da camada e a frequência da onda sísmica." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def camada_fina(velocidade, espessura, frequencia):\n", " n_samples, n_traces = [400, 100]\n", " dt, dz = 1e-4, 1\n", " velocity = 3000*np.ones((n_samples, n_traces))\n", " top = 150\n", " bottom = top + int(np.floor(espessura/dz))\n", " velocity[top : bottom, :] = velocidade\n", " # Gardner's relation: https://en.wikipedia.org/wiki/Gardner%27s_relation\n", " rho = 0.31*(velocity**0.25) \n", " vel_l = conv.depth_2_time(velocity, velocity, dt=dt, dz=dz)\n", " rho_l = conv.depth_2_time(velocity, rho, dt=dt, dz=dz)\n", " rc = conv.reflectivity(vel_l, rho_l)\n", " data = conv.convolutional_model(rc, frequencia, conv.rickerwave, dt=dt)\n", " \n", " fig, axes = plt.subplots(1, 2, figsize=(8, 5))\n", " ax = axes[0]\n", " ax.set_title(\"Modelo (em profundidade)\")\n", " tmp = ax.imshow(velocity, extent=[0, n_traces, n_samples*dz, 0],\n", " cmap=\"viridis\", aspect='auto', origin='upper',\n", " vmin=1000, vmax=5000)\n", " fig.colorbar(tmp, ax=ax, pad=0, aspect=50)\n", " ax.set_ylabel('Profundidade (m)')\n", "\n", " ax = axes[1]\n", " ax.set_title(\"Sismograma\")\n", " seismic_image(data, dt=dt, cmap=\"RdBu_r\", aspect='auto')\n", " ax.set_ylabel('Tempo (s)')\n", " ax.set_ylim(0.3, 0)\n", " plt.tight_layout()\n", " \n", "ipw.interactive(camada_fina,\n", " velocidade=ipw.FloatSlider(min=2000, max=5000, step=200, value=1000),\n", " espessura=ipw.FloatSlider(min=5, max=150, step=5, value=100),\n", " frequencia=ipw.FloatSlider(min=10, max=60, step=5, value=30))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Para pensar\n", "\n", "* O que acontece com o tempo de chegada da reflexão no topo da camada quando você diminui a espessura? Isso deveria acontecer?\n", "* Como a velocidade e a frequência influenciam sua capacidade de ver o topo e a base da camada separados?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cenários geológicos\n", "\n", "Agora, vamos modelar diferentes cenários geológicos utilizando um programa do tipo MS Paint.\n", "\n", "Rode as células abaixo para criar as funções que vamos precisar para nossa modelagem." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def img_template(fname, pixel_thresh=10, return_colors=False):\n", " img = Image.open(fname)\n", " count, colors = zip(*[[n, c] for n, c in img.getcolors() if n > pixel_thresh])\n", " sort = np.argsort(count)\n", " colors = np.array(colors)[sort][::-1]\n", " data = scipy.misc.fromimage(img)\n", " template = np.zeros(data.shape[:2], dtype=np.int)\n", " for i, c in enumerate(colors):\n", " template[np.all(data == c, axis=2)] = i\n", " # For now, any pixel not of the top colors (eliminated by pixel_thresh)\n", " # is assigned index 0. A better way would be interpolate or copy the neighbors.\n", " if return_colors:\n", " return template, colors\n", " else:\n", " return template" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def painter_widget(template, vmin, vmax, step, cmap='copper_r', prop='V', plot_func=None):\n", " colors = np.unique(template)\n", " args = dict(min=vmin, max=vmax, step=step)\n", " sliders = dict([['{}{}'.format(prop, i + 1), ipw.FloatSlider(**args)]\n", " for i in range(len(colors))])\n", " model = np.empty_like(template)\n", " def plot_func(vp):\n", " rho = 0.31*(vp**0.25) \n", " dz = 2000/vp.shape[0]\n", " dt = 1e-3\n", " f = 15\n", " vp_t = conv.depth_2_time(vp, vp, dt=dt, dz=dz)\n", " rho_t = conv.depth_2_time(vp, rho, dt=dt, dz=dz)\n", " rc = conv.reflectivity(vp_t, rho_t)\n", " data = conv.convolutional_model(rc, f, conv.rickerwave, dt=dt)\n", " times = np.arange(vp_t.shape[0])*dt\n", " # Plots\n", " fig = plt.figure(figsize=(12, 4))\n", " ax = plt.subplot(121)\n", " plt.imshow(vp, cmap='copper_r', extent=[0, vp.shape[1], vp.shape[0]*dz, 0],\n", " vmin=vmin, vmax=vmax, aspect='auto')\n", " plt.colorbar(pad=0.01, aspect=40).set_label('Velocidade (m/s)')\n", " ax.set_title('Modelo')\n", " ax.set_ylabel('profundidade') \n", " ax = plt.subplot(122)\n", " seismic_image(data, dt=dt, cmap='RdBu_r', aspect='auto')\n", " ax.set_title(u'Sessão sísmica')\n", " ax.set_ylabel('tempo (s)')\n", " plt.tight_layout()\n", " return fig\n", " def callback(**kwargs):\n", " for v, c in zip(kwargs, colors):\n", " model[template == c] = kwargs[v]\n", " plot_func(model)\n", " return ipw.interactive(callback, **sliders)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Desenhando modelos\n", "\n", "Utilize o Pinta para desenhar seus modelos:\n", "\n", "1. Crie uma figura de **300 x 150 pixels** (clique em \"New Figure\"). \n", "2. Utilize as ferramentas de retângulo e pincel para desenhar.\n", "3. Coloque **cada litologia** com uma cor diferente. Não importa qual.\n", "4. Salve sua figura como **.png** na mesma pasta que está o notebook.\n", "\n", "### Modelos\n", "\n", "Você deve criar 3 modelos:\n", "\n", "1. Um domo de sal com as camadas sedimentares ao redor e camadas planas abaixo dele ([exemplo](../data/modelo-sal.png)).\n", "2. Uma cada irregular na superfície com camadas plano-paralelas abaixo dela ([exemplo](../data/modelo-camada-intemperismo.png)).\n", "3. Um carbonato (recife) inserido no meio de camadas plano-paralelas (faça o topo dele ser um pouco acima da camada na qual está inserido) ([exemplo](../data/modelo-carbonato.png)).\n", "\n", "Coloque o nome da sua figura nas células abaixo e execute as. Cada uma será uma figura interativa na qual você pode controlar as velocidades de cada camada em seu modelo.\n", "\n", "Utilize a tabela abaixo (retirada de Kearey et al, 2002) para escolher as velocidades para seu modelo.\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "template_sal = img_template('NOME-DA-SUA-FIGURA.png')\n", "painter_widget(template_sal, 1000, 8000, 100)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "template_carbonato = img_template('NOME-DA-SUA-FIGURA.png')\n", "painter_widget(template_carbonato, 1000, 8000, 100)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "template_camada_irregular = img_template('NOME-DA-SUA-FIGURA.png')\n", "painter_widget(template_camada_irregular, 1000, 8000, 100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Para pensar\n", "\n", "* O que acontece com as camadas abaixo do sal?\n", "* O que acontece com os cantos das camadas que foram deformadas pelo sal?\n", "* O que acontece com as camadas abaixo da camada irregular?\n", "* Como você interpretaria o dado do carbonado se não soubesse que ali tem um carbonato?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Referências\n", "\n", "Kearey, P., M. Brooks, and I. Hill (2002), An Introduction to Geophysical Exploration, 3 edition., Wiley-Blackwell, Malden, MA." ] }, { "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 [conda env:geofisica2]", "language": "python", "name": "conda-env-geofisica2-py" }, "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": { "37d976269a15441292f1197634bad706": { "views": [ { "cell_index": 7 } ] } }, "version": "1.2.0" } }, "nbformat": 4, "nbformat_minor": 1 }