Notebook elaborado para apresentar uma breve introdução ao método geoelétrico. Criado para a disciplina Geofísica II da Universidade Federal de Uberlândia. O uso e a reprodução são livres para fins educacionais, pede-se apenas a citação da fonte.
Prof. Dr. Emerson Rodrigo Almeida
Universidade Federal de Uberlândia
Instituto de Geografia - Curso de Geologia
emerson.almeida@ufu.br
Última modificação: 23/09/2022
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ã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.
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, 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.
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.
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.
import modulos.er1d as er
import numpy as np
tendcurva = False
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.)
Execute a célula abaixo para configurar as posições dos eletrodos.
eletrodos_AB = np.array([1.5, 2.0, 3.0, 4.0, 5.0, 6.0, 8.0, 10.0, 12.0, \
15.0, 20.0, 25.0, 30.0, 40.0, 50.0, 60.0, 80.0, \
100.0, 150.0, 200.0])
eletrodos_MN = np.array([0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1.0, 1.0, 1.0, \
2.0, 2.0, 2.0, 2.0, 5.0, 5.0, 10.0, 10.0, \
10.0, 10.0, 10.0])
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.
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:
Camada | Resistividade ($\Omega$.m) | Espessura (m) | Geologia |
---|---|---|---|
1 | 100.0 | 4.0 | Camada argilosa |
2 | 1500.0 | 30.0 | Basalto |
3 | 600.0 | - | Basalto fraturado saturado |
Execute a célula abaixo para configurar o modelo e visualizá-lo.
# modelo 1D de três camadas
resistividades = np.r_[300.0, 1300.0, 500.0]
espessuras = np.r_[4.0, 30.0]
meu_modelo_01 = er.modelo_geo(resistividades, espessuras)
meu_modelo_01.mostra_grafico(n_fig='1')
Execute a célula abaixo para executar a SEV com as posições de eletrodos e o modelo geoelétrico configurados acima.
sev01 = er.sev(eletrodos_AB, eletrodos_MN, 'Schlumberger')
sev01.fwd(meu_modelo_01)
er.plota_sondagem(sev01, meu_modelo_01, tendencias=tendcurva, n_fig='2')
Pergunta: Quantas camadas você consegue identificar através das tendências da curva de resistividade aparente? É possível identificar todas as camadas do modelo?
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:
Camada | Resistividade ($\Omega$.m) | Espessura (m) | Geologia |
---|---|---|---|
1 | 100.0 | 4.0 | Aterro argiloso |
2 | 500.0 | 15.0 | Arenito seco |
3 | 60.0 | 2.0 | Arenito saturado |
4 | 1000.0 | 15.0 | Granito são |
5 | 100.0 | - | Granito fraturado saturado |
Execute a célula abaixo para configurar o modelo e apresentá-lo.
# modelo 1D
resistividades = np.r_[100.0, 500.0, 60.0, 1000, 100.0]
espessuras = np.r_[4.0, 15.0, 5.0, 15]
meu_modelo_02 = er.modelo_geo(resistividades, espessuras)
meu_modelo_02.mostra_grafico(n_fig='3')
e execute a célula abaixo para visualizar a curva de resistividade aparente correspondente.
sev_02 = er.sev(eletrodos_AB, eletrodos_MN, 'Schlumberger')
sev_02.fwd(meu_modelo_02)
er.plota_sondagem(sev_02, meu_modelo_02, tendencias=tendcurva, n_fig='4')
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?
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.
AB_campo = np.array([1.5, 2.0, 3.0, 4.0, 5.0, 6.0, 6.0, 8.0, 8.0, 10.0, \
10.0, 12.0, 15.0, 15.0, 20.0, 20.0, 25.0, 30.0, 40.0, \
40.0, 50.0, 50.0, 60.0, 60.0, 80.0, 80.0, 100.0, 100.0, \
150.0, 150.0, 200.0, 200])
MN_campo = np.array([0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1.0, 0.5, 1.0, 0.5, \
1.0, 1.0, 1.0, 2.0, 1.0, 2.0, 2.0, 2.0, 2.0, 5.0, \
2.0, 5.0, 5.0, 10.0, 5.0, 10.0, 5.0, 10.0, 5.0, 10.0, \
5.0, 10.0])
dados_medidos = np.array([2157.0, 2598.0, 3592.0, 3810.0, 3610.0, 3167.0, \
3215.0, 2728.0, 2771.0, 2286.0, 2320.0, 2004.0, \
1372.0, 1415.0, 703.0, 727.0, 457.0, 296.0, 202.0, \
233.0, 193.0, 217.0, 235.0, 229.0, 288.0, 280.0, \
348.0, 339.0, 501.0, 484.0, 637.0, 621.0])
minha_sondagem = er.curva_campo(AB_campo, MN_campo, dados_medidos)
minha_sondagem.plota_dados()
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. 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.
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.
Execute a célula para registrar os valores.
resistividades = np.r_[ ] # preencha entre os colchetes, separe os valores por vírgula!
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.
espessuras = np.r_[ ] # preencha entre os colchetes, separe os valores por vírgula!
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.
meu_modelo_campo = er.modelo_geo(resistividades, espessuras)
minha_sondagem.modela_dados(meu_modelo_campo)
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.