{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "**Course website**: http://www.leouieda.com/geofisica1\n", "\n", "**Note**: This notebook is part of the course \"Geofísica 1\" 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)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Prática 5 - Modelagem direta 2D para testar hipóteses\n", "\n", "Objetivos:\n", "\n", "* Entender o que é e qual é o objetivo da modelagem direta.\n", "* Aprender como testar uma hipótese geológica com dados geofísicos.\n", "* Ilustrar a importância de testes com dados sintéticos.\n", "* Aprender na prática o significado de falta de unicidade." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparação\n", "\n", "Esse documento que você está usando é um [IPython notebook](http://ipython.org/notebook.html). É um documento interativo que mistura texto (como esse), código (como abaixo), e o resultado de executar o código (que pode ser números, texto, figuras, videos, etc). Esta prática usará a biblioteca [Fatiando a Terra](http://fatiando.org) de modelagem geofísica. Vamos usar modelagem direta interativa da classe `Moulder`. Para isso, precisamos carregar (`import`) o `Moulder` e também o módulo [numpy](http://www.numpy.org/).\n", "\n", "O notebook é divido em células (como esta). Para editar o conteúdo de uma célula, clique nela (clique nesta para editar esse texto). Para executar uma célula, aperte `Shift + Enter`. Execute as duas células abaixo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import division\n", "from fatiando.gravmag.interactive import Moulder\n", "import fatiando\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "print('Versão do Fatiando a Terra: {}'.format(fatiando.__version__))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tarefa 1: Gerar dados sintéticos\n", "\n", "Essa tarefa será \"brincar de Deus\". Vamos criar uma \"Terra\" nossa (nosso modelo) e usar essa Terra para gerar dados (os dados sintéticos).\n", "\n", "1. Execute a célula abaixo (clique nela e aperte `Shift + Enter`) para abrir uma janela para modelagem direta.\n", "2. Crie um modelo com 1 corpo (use a densidade que quiser).\n", "3. Experimente diferentes configurações e veja como o dado (anomalia Bouguer) muda.\n", "4. Coloque 0.1 mGal de erro no dado. Veja como o erro influencia o dado.\n", "5. Quando terminar, feche a janela." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "area = (0, 50e3, 0, 20e3)\n", "x = np.linspace(area[0], area[1], 150)\n", "z = np.zeros_like(x)\n", "modelo1 = Moulder(area, x, z)\n", "modelo1.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rode a célula abaixo para salvar o seu modelo e os dados gerados. **Mude os nomes dos arquivos (coisas entre `''`) para não perder seus dados**." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelo1.save('modelo1')\n", "modelo1.save_predicted('modelo1-dados.txt')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Perguntas\n", "\n", "* O que é dado que você gerou? É anomalia ar-livre, Bouguer, nenhuma, ambas?\n", "* O valor de densidade colocado é um contraste entre a densidade do corpo e o que?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tarefa 2: Testar uma hipótese sobre o dado do colega\n", "\n", "Pegue o arquivo de dados (`modelo1-dados.txt`) e o arquivo de modelo (`modelo1`) de um colega **que você não viu desenhando**. A única informação \"geológica\" que você tem é que o dado é **produzido por 1 único corpo**.\n", "\n", "1. Mude os nomes dos arquivos na célula abaixo (coisas entre `''`) para os do colega.\n", "2. Rode a célula abaixo para carregar os dados e abrir a janela de modelagem.\n", "3. Faça um modelo com 1 corpo que ajuste o dado do colega.\n", "4. Quando ajustar os dados, temos um modelo válido do ponto de vista geofísico.\n", "5. Feche a janela quando terminar (não se preocupe, tudo estará salvo). " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dados_colega = 'modelo1-dados.txt'\n", "modelo_colega = 'modelo1'\n", "x, z, dados = np.loadtxt(dados_colega, unpack=True)\n", "modelo2 = Moulder(area, x, z, data=dados)\n", "modelo2.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A célula abaixo irá salvar seu modelo. **Mude o nome do arquivo (`'modelo2'`) para não perder seus dados**." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelo2.save('modelo2')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vamos comparar agora o seu modelo com \"a realidade\" criada pelo colega. Rode as duas células abaixo para gerar os gráficos. O primeiro é o seu modelo (**troque o nome do arquivo para o que você colocou na célula acima**). O segundo é o verdadeiro. **Para salvar a figura abaixo, clique com o botão direito e selecione \"Salvar imagem\".**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelo2.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Moulder.load(modelo_colega).plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Perguntas \n", "\n", "* Você chegou perto (sem colar)?\n", "* Muito provavelmente a resposta acima é \"não\". Por que?\n", "* O seu modelo é uma soluação válida do ponto de vista geofísico?\n", "* O que seria necessário para produzir um modelo que se aproxime mais da realidade?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tarefa 3: Um modelo de intrusão ígnea\n", "\n", "O problema anterior foi de sacanagem. Não há como gerar um modelo que reproduza a realidade somente com a anomalia. Como você viu, **existem vários (até infinitos) modelos que produzem o mesmo dado**. O que diferencia um possível modelo e outro é o conhecimento geológico e geofísico do intérprete (você).\n", "\n", "Para ilustrar isso vamos fazer uma \"realidade\" na qual o teremos mais informações geológicas. Dessa vez, diremos para o colega que pegar nosso dado qual é o contexo geológico e qual é a densidade correta.\n", "\n", "Em situações reais, dificilmente fazemos um levantamento geofísico em uma área onde o conhecimento da geologia é zero. Sabemos que tem intrusões nessa região, que ali é uma bacia sedimentar, etc." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Parte 1: Gere dados sintéticos\n", "\n", "1. Gere um modelo de uma (1) intrusão (dique, batólito, soleira, etc).\n", "2. Coloque um contraste de densidade positivo (rochas ígneas são densas).\n", "3. Feche a janela quando terminar." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "area = (0, 10e3, 0, 5e3)\n", "x = np.linspace(area[0], area[1], 150)\n", "z = np.zeros_like(x)\n", "modelo3 = Moulder(area, x, z)\n", "modelo3.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A célula abaixo salva os dados e o modelo. **Mude os nomes dos arquivos para não confundir/sobreescrever e perder seus dados.**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelo3.save('modelo3')\n", "modelo3.save_predicted('modelo3-dados.txt')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Parte 2: Modelagem da intrusão ígnea\n", "\n", "Vamos tentar a modelagem novamente. Dessa vez, sabemos que a anomalia é causada por uma intrusão (batólito, dique, soleira, etc). Também sabemos a densidade correta (perguntar para o colega).\n", "\n", "1. Troque os dados e o modelo (os dois arquivos acima) com algum colega que **não viu o modelo**. Dessa vez, informem a densidade que usaram.\n", "2. Mude os nomes dos arquivos na célula abaixo para os dados do colega.\n", "3. Execute a célula abaixo para carregar os dados do colega e fazer a modelagem.\n", "4. Coloque a densidade correta.\n", "5. Produza uma solução válida (que ajuste os dados) e que **também seja condizente com a geologia**." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dado_colega_intrusao = 'modelo3-dados.txt'\n", "modelo_colega_intrusao = 'modelo3'\n", "x, z, dado = np.loadtxt(dado_colega_intrusao, unpack=True)\n", "modelo_colega3 = Moulder(area, x, z, data=dado)\n", "modelo_colega3.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Salvando a sua solução:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelo_colega3.save('modelo_colega3')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vamos ver como foi dessa vez. Primeiro o seu resultado e depois o verdadeiro. **Mude o nome do arquivo para o que você usou na célula acima**." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelo_colega3.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Moulder.load(modelo_colega_intrusao).plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Perguntas \n", "\n", "* Você chegou perto (sem colar)?\n", "* Foi mais próximo que da última vez? Por que?\n", "* O seu modelo é uma soluação válida do ponto de vista geofísico?\n", "* Como a informação adicional te ajudou/não ajudou?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## (EXTRA) Tarefa 4: Modelo de uma bacia sedimentar" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vamos repetir o mesmo processo feito acima mas dessa vez para o modelo de uma bacia sedimentar. \n", "Teremos que fazer algumas simplificações:\n", "\n", "* O pacote sedimentar tem densidade homogênea.\n", "* Não há intrusões nem outras anomilias de densidade.\n", "* A bacia não possui topografia.\n", "\n", "Dessa vez vamos **trocar a dica**: ao invés da densidade, vamos informar a profundidade do embasamento em dois pontos.\n", "Em casos reais, essa informação poderia vir de poços que alcaçaram o embasamento." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Parte 1: Gere dados sintéticos\n", "\n", "1. Gere um modelo de uma bacia sedimentar.\n", "2. Coloque um contraste de densidade negativo.\n", "3. Feche a janela quando terminar." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "area = (0, 200e3, 0, 15e3)\n", "x = np.linspace(area[0], area[1], 150)\n", "z = np.zeros_like(x)\n", "modelo4 = Moulder(area, x, z)\n", "modelo4.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A célula abaixo salva os dados e o modelo. **Mude os nomes dos arquivos para não confundir/sobreescrever e perder seus dados.**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelo4.save('modelo4')\n", "modelo4.save_predicted('modelo4-dados.txt')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Parte 2: Modelagem da bacia\n", "\n", "Sabemos que a anomalia é causada por uma bacia sedimentar e que podemos considerar que a densidade é homogênea.\n", "\n", "1. Troque os dados e o modelo com algum colega que **não viu o modelo**. \n", "2. Informem a profundidade do embasamento para 2 coordenadas x (digam o valor de x e qual é o z correspondente).\n", "3. Mude os nomes dos arquivos na célula abaixo para os dados do colega.\n", "4. Execute a célula abaixo para carregar os dados do colega e fazer a modelagem.\n", "5. Produza uma solução válida (que ajuste os dados) e que **também seja condizente com a geologia**." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dado_colega_bacia = 'modelo4-dados.txt'\n", "modelo_colega_bacia = 'modelo4'\n", "x, z, dado = np.loadtxt(dado_colega_bacia, unpack=True)\n", "modelo_colega4 = Moulder(area, x, z, data=dado)\n", "modelo_colega4.run()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelo_colega4.save('modelo_colega4')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vamos ver se vocês acertaram dessa vez. **Mude o nome do arquivo na célula abaixo para o que você usou para salvar acima**." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelo_colega4.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Moulder.load(modelo_colega_bacia).plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Perguntas \n", "\n", "* Por que você usou uma densidade negativa para os sedimentos?\n", "* Você chegou perto (sem colar)?\n", "* Foi mais próximo que da última vez? Por que?\n", "* O seu modelo é uma soluação válida do ponto de vista geofísico?\n", "* Como a informação adicional te ajudou/não ajudou?" ] } ], "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.9" } }, "nbformat": 4, "nbformat_minor": 0 }