{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "M_lrl2g293_T" }, "source": [ "Notebook elaborado para apresentar uma breve introdução ao método geoelétrico.\n", "Criado para a disciplina Geofísica II da Universidade Federal de Uberlândia.\n", "O uso e a reprodução são livres para fins educacionais, pede-se apenas a citação da fonte.\n", "\n", "[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n", "\n", "Prof. Dr. Emerson Rodrigo Almeida
\n", "Universidade Federal de Uberlândia
\n", "Instituto de Geografia - Curso de Geologia
\n", "[emerson.almeida@ufu.br](mailto:emerson.almeida@ufu.br)
\n", "\n", "

 

\n", "Última modificação: 23/09/2022" ] }, { "cell_type": "markdown", "metadata": { "id": "0Yg1Hgy_ob4B" }, "source": [ "# Instruções iniciais\n", "\n", "Neste notebook você irá avaliar as curvas de resistividade aparente de alguns modelos geoelétricos e irá elaborar modelos geoelétricos a partir de curvas de resistividade aparente obtidas em Sondagens Elétricas Verticais (SEVs) em arranjo Schlumberger. Para isto **leia atentamente** as instruções apresentadas antes de cada célula e execute-as uma a uma, para acompanhar o processo corretamente.\n", "\n", "Não se preocupe em compreender o código em si, **não é obrigatório que você conheça a programação** para obter e interpretar os resultados da demonstração. Mesmo assim, sinta-se livre caso queira perguntar qualquer coisa para aprender mais sobre o código e sua elaboração.\n", "\n", " \n", "# Passo 01 - Preparação\n", "\n", "Primeiramente vamos preparar o notebook com os pacotes, módulos e funções que precisaremos no decorrer da demonstração. A célula abaixo executa a instalação do pacote open source [SimPEG](https://docs.simpeg.xyz/), responsável por executar os cálculos relacionados à física do problema. Se você está executando este notebook no MyBinder ou no Google Colab não se preocupe, nada será instalado na sua máquina local. Execute esta célula uma vez antes de executar qualquer outra parte do código e não altere nada no código apresentado na célula para não criar problemas na execução do código.\n", "\n", "Você pode executar o código na célula clicando sobre ela e em seguida clicando no botão **RUN** na barra do Jupyter Notebook ou pressionando as teclas **SHIFT+ENTER** no seu teclado. A execução desta primeira célula pode demorar um pouco, pois um pacote inteiro estará sendo instalado. Aguarde o término da instalação antes de executar a célula seguinte.\n", "\n", "

 

\n", "\n", "**Importante!** Nem todas as células de código desta demostração irão retornar algum tipo de mensagem ou figura após a execução. Isto é normal e não significa que a execução tenha falhado. Perceba o símbolo **In [ ]:** próximo ao canto superior esquerdo de cada célula. Ao iniciar a execução de uma delas você verá um asterisco ($*$) aparecer dentro dos colchetes. Você saberá que a execução ocorreu sem problemas quando o $*$ dentro dos colchetes for substituído por um número e nenhuma mensagem de erro aparecer abaixo da célula executada." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 15038, "status": "ok", "timestamp": 1613147713833, "user": { "displayName": "Emerson Almeida", "photoUrl": "", "userId": "00762844264177541394" }, "user_tz": 180 }, "id": "8Y05O0Hz-BMN", "outputId": "156256f1-0b44-45e3-e5e5-5c80410bf137" }, "outputs": [], "source": [ "import modulos.er1d as er\n", "import numpy as np\n", "tendcurva = False" ] }, { "cell_type": "markdown", "metadata": { "id": "S-oc7xYzCupN" }, "source": [ "# Passo 02 - Configuração do arranjo\n", "\n", "Comece pela configuração da SEV, definindo as meias distancias entre os eletrodos A e B (corrente) e entre os eletrodos M e N (Potencial). Este notebook irá utilizar apenas o arranjo Schlumberger, pois é o de uso mais comum em campo. A abertura entre eletrodos de potencial que será utilizada aqui é um exemplo de espaçamentos que podem ser utilizados em campo (porém não é mandatório seguir exatamente estes espaçamentos.)\n", "\n", "Execute a célula abaixo para configurar as posições dos eletrodos." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "executionInfo": { "elapsed": 16654, "status": "ok", "timestamp": 1613147715499, "user": { "displayName": "Emerson Almeida", "photoUrl": "", "userId": "00762844264177541394" }, "user_tz": 180 }, "id": "UjHUiCJ5DG2p" }, "outputs": [], "source": [ "eletrodos_AB = np.array([1.5, 2.0, 3.0, 4.0, 5.0, 6.0, 8.0, 10.0, 12.0, \\\n", " 15.0, 20.0, 25.0, 30.0, 40.0, 50.0, 60.0, 80.0, \\\n", " 100.0, 150.0, 200.0])\n", "\n", "eletrodos_MN = np.array([0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1.0, 1.0, 1.0, \\\n", " 2.0, 2.0, 2.0, 2.0, 5.0, 5.0, 10.0, 10.0, \\\n", " 10.0, 10.0, 10.0])" ] }, { "cell_type": "markdown", "metadata": { "id": "j0ShTbI4zU-D" }, "source": [ "# Passo 02 - Configuração dos modelos geoelétricos\n", "\n", "A modelagem requer que seja fornecido um modelo geoelétrico, portanto vamos criá-lo aqui. Lembre-se de que o modelo geoelétrico apresenta os principais contrastes de resistividade, cujas profundidades das interfaces podem coincidir com as profundidades dos contatos geológicos ou não. Neste notebook você irá observar o comportamento da curva em alguns modelos em particular.\n", "\n", "### Modelo 01\n", "\n", "Este é um modelo simples, de três camadas. Você pode interpretá-lo como, por exemplo, uma camada argilosa sobre uma camada de basalto não fraturado:\n", "\n", "| Camada | Resistividade ($\\Omega$.m) | Espessura (m) | Geologia |\n", "|:---------------:|:---------------------------:|:-------------:|:----------------:|\n", "| 1 | 100.0 | 4.0 | Camada argilosa |\n", "| 2 | 1500.0 | 30.0 | Basalto |\n", "| 3 | 600.0 | - | Basalto fraturado saturado |\n", "\n", "Execute a célula abaixo para configurar o modelo e visualizá-lo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 303 }, "executionInfo": { "elapsed": 16644, "status": "ok", "timestamp": 1613147715510, "user": { "displayName": "Emerson Almeida", "photoUrl": "", "userId": "00762844264177541394" }, "user_tz": 180 }, "id": "M56WnB69ElVp", "outputId": "8813853d-18e3-4b3e-b03d-51adb0545203" }, "outputs": [], "source": [ "# modelo 1D de três camadas\n", "resistividades = np.r_[300.0, 1300.0, 500.0]\n", "espessuras = np.r_[4.0, 30.0]\n", "\n", "meu_modelo_01 = er.modelo_geo(resistividades, espessuras)\n", "meu_modelo_01.mostra_grafico(n_fig='1')" ] }, { "cell_type": "markdown", "metadata": { "id": "PUEiJGc4FEmb" }, "source": [ "Execute a célula abaixo para executar a SEV com as posições de eletrodos e o modelo geoelétrico configurados acima.\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 467 }, "executionInfo": { "elapsed": 16626, "status": "ok", "timestamp": 1613147715516, "user": { "displayName": "Emerson Almeida", "photoUrl": "", "userId": "00762844264177541394" }, "user_tz": 180 }, "id": "uhsBrU3EIGLk", "outputId": "11f6e2d2-30df-4256-e68d-0be4caae9be0" }, "outputs": [], "source": [ "sev01 = er.sev(eletrodos_AB, eletrodos_MN, 'Schlumberger')\n", "sev01.fwd(meu_modelo_01)\n", "er.plota_sondagem(sev01, meu_modelo_01, tendencias=tendcurva, n_fig='2')" ] }, { "cell_type": "markdown", "metadata": { "id": "orrLrWmqJJnx" }, "source": [ "**Pergunta:** Quantas camadas você consegue identificar através das tendências da curva de resistividade aparente? É possível identificar todas as camadas do modelo?" ] }, { "cell_type": "markdown", "metadata": { "id": "6ZtxMdci93_t" }, "source": [ "### Modelo 02\n", "\n", "Considere agora um modelo um pouco mais elaborado. Execute a célula abaixo para definir um modelo de 5 camadas que pode ser interpretado da seguinte forma:\n", "\n", "| Camada | Resistividade ($\\Omega$.m) | Espessura (m) | Geologia |\n", "|:---------------:|:---------------------------:|:-------------:|:----------------:|\n", "| 1 | 100.0 | 4.0 | Aterro argiloso |\n", "| 2 | 500.0 | 15.0 | Arenito seco |\n", "| 3 | 60.0 | 2.0 | Arenito saturado |\n", "| 4 | 1000.0 | 15.0 | Granito são |\n", "| 5 | 100.0 | - | Granito fraturado saturado |\n", "\n", "Execute a célula abaixo para configurar o modelo e apresentá-lo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 303 }, "executionInfo": { "elapsed": 19478, "status": "ok", "timestamp": 1613147718390, "user": { "displayName": "Emerson Almeida", "photoUrl": "", "userId": "00762844264177541394" }, "user_tz": 180 }, "id": "HEp9sdAHzKBy", "outputId": "60287164-f8cd-486d-ac2a-a21779c886c5" }, "outputs": [], "source": [ "# modelo 1D\n", "resistividades = np.r_[100.0, 500.0, 60.0, 1000, 100.0]\n", "espessuras = np.r_[4.0, 15.0, 5.0, 15]\n", "\n", "meu_modelo_02 = er.modelo_geo(resistividades, espessuras)\n", "meu_modelo_02.mostra_grafico(n_fig='3')" ] }, { "cell_type": "markdown", "metadata": { "id": "nrNyWOOy93_x" }, "source": [ "e execute a célula abaixo para visualizar a curva de resistividade aparente correspondente." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 467 }, "executionInfo": { "elapsed": 19461, "status": "ok", "timestamp": 1613147718396, "user": { "displayName": "Emerson Almeida", "photoUrl": "", "userId": "00762844264177541394" }, "user_tz": 180 }, "id": "HmYlErCuKklV", "outputId": "812b2ce6-f4f6-46f0-965d-594da116f06c" }, "outputs": [], "source": [ "sev_02 = er.sev(eletrodos_AB, eletrodos_MN, 'Schlumberger')\n", "sev_02.fwd(meu_modelo_02)\n", "er.plota_sondagem(sev_02, meu_modelo_02, tendencias=tendcurva, n_fig='4')" ] }, { "cell_type": "markdown", "metadata": { "id": "GYabnEBrLEoo" }, "source": [ "**Perguntas:** Quantas camadas você identifica na sondagem apenas observando as tendências da curva de resistividade aparente? É possível identificar todas as camadas do modelo?\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "aXlTG0ryo7HI" }, "source": [ "# Passo 04 - Modelagem da curva de campo" ] }, { "cell_type": "markdown", "metadata": { "id": "miRKqvtH93_7" }, "source": [ "Agora você irá obter um modelo geoelétrico a partir de uma curva obtida em campo. Aqui você irá observar também a ocorrência da *embreagem*, que é um procedimento feito em uma sondagem com arranjo Schlumberger quando se pretende aumentar o espaçamento entre os eletrodos M e N.\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 522 }, "executionInfo": { "elapsed": 22714, "status": "ok", "timestamp": 1613147721672, "user": { "displayName": "Emerson Almeida", "photoUrl": "", "userId": "00762844264177541394" }, "user_tz": 180 }, "id": "9NpuH2dBOhmp", "outputId": "a1545226-3b82-4b6f-d3de-abec4623e227" }, "outputs": [], "source": [ "AB_campo = np.array([1.5, 2.0, 3.0, 4.0, 5.0, 6.0, 6.0, 8.0, 8.0, 10.0, \\\n", " 10.0, 12.0, 15.0, 15.0, 20.0, 20.0, 25.0, 30.0, 40.0, \\\n", " 40.0, 50.0, 50.0, 60.0, 60.0, 80.0, 80.0, 100.0, 100.0, \\\n", " 150.0, 150.0, 200.0, 200])\n", "MN_campo = np.array([0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1.0, 0.5, 1.0, 0.5, \\\n", " 1.0, 1.0, 1.0, 2.0, 1.0, 2.0, 2.0, 2.0, 2.0, 5.0, \\\n", " 2.0, 5.0, 5.0, 10.0, 5.0, 10.0, 5.0, 10.0, 5.0, 10.0, \\\n", " 5.0, 10.0])\n", "dados_medidos = np.array([2157.0, 2598.0, 3592.0, 3810.0, 3610.0, 3167.0, \\\n", " 3215.0, 2728.0, 2771.0, 2286.0, 2320.0, 2004.0, \\\n", " 1372.0, 1415.0, 703.0, 727.0, 457.0, 296.0, 202.0, \\\n", " 233.0, 193.0, 217.0, 235.0, 229.0, 288.0, 280.0, \\\n", " 348.0, 339.0, 501.0, 484.0, 637.0, 621.0])\n", "\n", "minha_sondagem = er.curva_campo(AB_campo, MN_campo, dados_medidos)\n", "minha_sondagem.plota_dados()" ] }, { "cell_type": "markdown", "metadata": { "id": "uPTbeceM0WGt" }, "source": [ "Agora é preciso encontrar o modelo que melhor se adequa a estes dados. Esta etapa é feita indicando as espessuras das camadas e a resistividade de cada uma. Preste bastante atenção, pois se quiser definir um modelo com $N$ camadas você deverá definir $N$ resistividades e $N-1$ espessuras, pois a última camada é considerada de espessura infinita.\n", "Tanto as resistividades quanto as espessuras devem ser informadas **em ordem crescente de profundidade**, i.e., informe primeiro a resistividade da camada mais rasa, depois a da camada abaixo dela, e assim por diante.\n", "\n", "As resistividades são configuradas na célula abaixo. Para ter um ponto de partida tente estimar visualmente o número de camadas que o modelo deve ter e, em seguida, tente acompanhar as tendências da curva para estimar a resistividade de cada uma. Você pode inserir qualquer número de valores de resistividade, apenas insira os valores entre os colchetes separando-os por vírgula.\n", "\n", "Execute a célula para registrar os valores." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "executionInfo": { "elapsed": 22700, "status": "ok", "timestamp": 1613147721676, "user": { "displayName": "Emerson Almeida", "photoUrl": "", "userId": "00762844264177541394" }, "user_tz": 180 }, "id": "cgmJtIZ_0WGv" }, "outputs": [], "source": [ "resistividades = np.r_[ ] # preencha entre os colchetes, separe os valores por vírgula!" ] }, { "cell_type": "markdown", "metadata": { "id": "KGx9qtGz0WGv" }, "source": [ "Agora configure as espessuras da mesma maneira, lembrando que a última camada não possui espessura. Em seguida, execute a célula abaixo para registrar os valores. Ao executá-la, se os valores foram inseridos corretamente você irá visualizar o modelo. Verifique se corresponde ao que você tinha em mente, caso contrário faça as modificações necessárias na célula acima e na célula abaixo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "executionInfo": { "elapsed": 22700, "status": "ok", "timestamp": 1613147721689, "user": { "displayName": "Emerson Almeida", "photoUrl": "", "userId": "00762844264177541394" }, "user_tz": 180 }, "id": "XvEZnixt0WGv" }, "outputs": [], "source": [ "espessuras = np.r_[ ] # preencha entre os colchetes, separe os valores por vírgula!" ] }, { "cell_type": "markdown", "metadata": { "id": "qZF5JYo10WGw" }, "source": [ "Agora execute a célula abaixo para verificar se a curva calculada a partir do seu modelo (linha vermelha) se encaixa nos dados observados em campo (pontos pretos). Quando a linha vermelha encaixar-se nos pontos, então você conseguiu definir um modelo **matematicamente** satisfatório. É importante observar que, mesmo que a curva se encaixe perfeitamente, é possível que o modelo obtido ainda não esteja de acordo com a geologia local." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 467 }, "executionInfo": { "elapsed": 22700, "status": "ok", "timestamp": 1613147721703, "user": { "displayName": "Emerson Almeida", "photoUrl": "", "userId": "00762844264177541394" }, "user_tz": 180 }, "id": "5cO44eIb0WGx", "outputId": "bd33411a-487e-409e-b6e0-f2a531b0022b" }, "outputs": [], "source": [ "meu_modelo_campo = er.modelo_geo(resistividades, espessuras)\n", "minha_sondagem.modela_dados(meu_modelo_campo)" ] }, { "cell_type": "markdown", "metadata": { "id": "qA9avpkw0WGx" }, "source": [ "Considere que esta sondagem tenha sido adquirida em um local onde a disposição das camadas segue a mesma sequênci descrita no **Modelo 02**, próem as profundidades são diferentes e você precisa estimá-las da melhor forma possível. Em vista disso você considera que a sua modelagem ficou boa? Anote o modelo e o menor erro que você conseguir alcançar." ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "sev_parte2.ipynb", "provenance": [ { "file_id": "1OvJuXk5VQHoNGNIlg2ASPw7DPclHAlFw", "timestamp": 1613080116999 }, { "file_id": "1SQcGcLJn1Irl0SJvfydxRjEw9e5Jyb-i", "timestamp": 1613078612640 }, { "file_id": "1S5zijHaAkSrBkhJRA6-mC6fsiDwPWIMJ", "timestamp": 1612878916167 }, { "file_id": "1FJBCBmnzN7z0wkznQ2fglUJSDXUTe7zD", "timestamp": 1612795672936 }, { "file_id": "1qcakyeI09GoE1N-1nsb6VfIJ1_wryU49", "timestamp": 1612711872571 } ] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 4 }