Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
INSTITUTO DE GEOCIÊNCIAS
Modelagem e inversão de
eletrorresistividade 1d usando
Fortran moderno: arranjos Wenner
e Schlumberger
SALVADOR – BAHIA
DEZEMBRO – 2018
Modelagem e inversão de eletrorresistividade 1d usando Fortran moderno:
por
Departamento de Geofísica
do
Instituto de Geociências
da
Comissão Examinadora
3
Abstract
The theories of resistivity methods are presented along with the solution of the appar-
ent resistivity for a geoelectric model of n homogeneous horizontal layers for the Wenner
and Schlumberger arrays, either ideal or exact, and includes the linearization of nonlinear
equations through the least squares procedure to perform the inversion of the data. An
explanation is given about the advantages of modern Fortran to the scientific community
and the new program units of its more recent versions, particularly the submodules. Tests
of the Fortran program for synthetic and real models were performed, in which hypothetical
situations with high level of error and few observed data were considered. Also includes the
script of the modeling and inversion codes, as well as the code of apparent resistivity for the
proposed arrays.
4
Sumário
Resumo 3
Abstract 4
Introdução 9
1 Fundamentação Teórica 11
1.1 Métodos Elétricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.1 Eletrorresistividade . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.2 Resistividade aparente . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.1.3 Arranjos de eletrodos . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.1.4 Modelo geoelétrico de n camadas . . . . . . . . . . . . . . . . . . . . 15
1.2 Inversão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2.2 Inversão de problemas não lineares . . . . . . . . . . . . . . . . . . . 17
2 Processamento de Dados 20
2.1 Por que Fortran? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.1 Unidades de programa . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2 O programa desenvolvido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.1 Passos do algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3 Resultados 27
3.1 Dados Sintéticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.1.1 Modelo de três camadas . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.1.2 Modelo inicial com alto nível de erro . . . . . . . . . . . . . . . . . . 31
3.1.3 Modelo com poucas observações . . . . . . . . . . . . . . . . . . . . . 31
3.2 Dados Reais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.1 Arranjo Wenner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.2 Arranjo Schlumberger . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5
6
4 Conclusões 40
Agradecimentos 42
Referências 44
A Códigos do programa 46
A.1 Inversão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
A.2 Modelagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
A.3 Resistividade aparente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Lista de Tabelas
7
Lista de Figuras
8
Introdução
A ciência geofísica aplica os princípios da física ao estudo da Terra e envolve realizar medidas
em sua superfície ou próximo a ela, medidas estas que são influenciadas pela distribuição
interna das propriedades físicas da Terra (Kearey et al., 2009). Dentre os muitos métodos
geofísicos existentes, os métodos elétricos se destacam por possuírem uma maior variedade
de técnicas e custo relativamente baixo. Telford et al. (1990) argumenta que, dentre eles, a
eletrorresistividade se sobressai.
O método da eletrorresistividade baseia-se na observação, via regra, da diferença de
potencial entre dois pontos, associada a uma distribuição de correntes elétricas induzidas
artificialmente no meio em estudo (Sato, 2002). O fato dessa técnica fazer uso de uma fonte
controlada e conhecida oferece considerável vantagem em relação aos demais métodos elé-
tricos, permitindo a sua amplamente utilização na exploração mineral, estudos geoelétricos,
arqueológicos, indústria civil e até mesmo na exploração de petróleo.
O papel da interpretação geofísica é atribuir significado geológico para aquilo que foi
medido, através dos muitos métodos existentes, e nesse sentido é indispensável que haja um
bom tratamento dos dados adquiridos. O desafio do processamento de dados em geofísica
é fornecer o melhor modelo possível que reflita a conjuntura geológica em subsuperfície de
forma a melhor auxiliar o intérprete com o máximo de informações possíveis a cerca da área
estudada.
A inversão geofísica se encaixa nesse contexto, ao buscar extrair propriedades físicas
da Terra, ou um modelo da Terra, a partir dos dados geofísicos que foram afetados pela
variação das propriedades do material no local (Sen e Stoffa, 1995). As teorias de inversão
foram e vêm sendo abordadas por diversos autores na literatura, seja para métodos elétricos
nas obras de Keller e Frischknecht (1966), Telford et al. (1990), Sen e Stoffa (1995) e Sato
(2002), para métodos potenciais por Blakely (1995) e eletromagnéticos por Nabighian (1988).
O avanço da capacidade de processamento dos computadores permitiu que os problemas
geofísicos fossem tratados com mais precisão e velocidade ao aliar análise numérica e progra-
mação de alto desempenho. Dessa forma, programas computacionais que realizam inversão
de dados geofísicos surgiram para auxiliar pesquisadores em busca de melhores soluções para
9
10
Fundamentação Teórica
1.1.1 Eletrorresistividade
Segundo Telford et al. (1990), a técnica da eletrorresistividade é superior aos outros méto-
dos elétricos porque resultados quantitativos são obtidos usando uma fonte controlada com
dimensões específicas. Há na literatura diversos exemplos do uso da resistividade elétrica
das rochas, tendo como exemplo a obra de Kearey et al. (2009), que cita a utilização na
engenharia civil para investigações geológicas antes de uma construção, na determinação da
profundidade do embasamento, investigações hidrogeológicas, localização e monitoramento
da extensão da poluição de águas subterrâneas, delineamento de lentes de água doce, inves-
tigações arqueológicas, exploração mineral e até para petróleo.
Convencionalmente, a aquisição utiliza uma configuração com quatro eletrodos que po-
dem ser dispostos com diferentes geometrias, como mostrado na Figura 1.1. A corrente
11
12
A rAM M
rBM
rBN
N
B
elétrica é emitida por um par de eletrodos, enquanto a diferença de potencial elétrico estabe-
lecida por essa corrente é medido pelo segundo par de eletrodos (Keller e Frischknecht, 1966),
permitindo obter valores de resistividade que serão utilizados para se estudar a subsuperfície.
Pode-se ainda considerar o conceito do fator geométrico K, que representa a disposição dos
eletrodos, reduzindo a equação para
∆V
ρ= K. (1.4)
I
13
Dessa forma, se o semi espaço for formado por rochas apresentando variações laterais
ou verticais das suas resistividades, a resistividade ρ varia à medida que se altera o arranjo
geométrico dos quatro eletrodos ou movendo-os ao longo da área sem alterar sua geometria.
Conhecendo os valores da corrente, a geometria e a diferença de potencial, calcula-se o valor
da resistividade (Parasnis, 1962). No entanto, como dito por Telford et al. (1990), apenas
no caso de um meio homogêneo a resistividade obtida através da equação 1.4 representará
a resistividade real, sendo assim, em geral o valor encontrado representa a resistividade
aparente ρa , a qual de nenhuma forma se trata da média das resistividades dos diferentes
materiais contidos no meio.
Arranjo Wenner
Arranjo Schlumberger
𝚫V
A M N B
a a a
𝚫V
A M N B
b
a a
∆V πa2
ρa,S = , (1.7)
I b
ρ0
z0
Fonte de corrente I
ρ1
z1
ρ
z2
zi ρi
zn−1 ρn−1
ρn
+z
1.2 Inversão
1.2.1 Introdução
O objetivo principal da teoria de inversão é determinar os parâmetros de um modelo que
reproduzem observações reais (Parker, 1977). Na geofísica, essa técnica é utilizada para en-
contrar modelos geológicos que justifiquem os valores das medidas físicas adquiridas durante
17
sendo que an = f (n) (x0 )/n! e x0 é o valor de x em torno do qual se faz a expansão. Então,
f 0 (x0 )(x − x0 ) f 00 (x0 )(x − x0 )2
f (x) = f (x0 ) + + + ··· (1.22)
1! 2!
No caso em estudo, se tem a função f (a, ρ1 , . . . , ρn , h1 , . . . , hn−1 ) ou simplesmente
f (a, w), sendo w um vetor contendo ρi e hi , e o argumento a forma a coleção a1 , a2 , . . . , aL .
Desta forma, definindo-se ρ¯ai (w) = f (ai , w), usa-se a aproximação por Série de Taylor para
escrever<D-1>
2n−1
(k+1) (k)
X ∂ ρ¯ai (w(k) ) (k)
ρ¯ai (w ) ≈ ρ¯ai (w )+ ∆wm , (1.23)
m=1
∂wm
em que os valores da coleção ρ¯ai de ordem k + 1 relacionam-se com os valores dessa mesma
coleção de ordem k, com m = 1, 2, . . . , 2n − 1, sendo n o número total de camadas.
Substituindo na equação 1.20, se tem
L 2n−1
!2
X X ∂ ρ¯ai (w(k) )
E2 = ρai − ρ¯ai (w(k) ) − (k)
∆wm . (1.24)
i=1 m=1
∂wm
A derivada parcial dos termos ∂ρai /∂∆wj e ∂ ρ¯ai /∂∆wj serão nulas porque ambas não
dependem de ∆wj , dessa forma
L 2n−1
! 2n−1
!
X X ∂ ρ¯ai (w(k) ) ∂ X ∂ ρ¯ai (w(k) )
ρai − ρ¯ai (w(k) ) − (k)
∆wm (k)
∆wm = 0. (1.26)
i=1 m=1
∂wm ∂∆wj m=1 ∂wm
Durante a expansão do segundo termo entre parênteses, quando ∆wm for diferente de
∆wj a derivada parcial será nula, logo só se considera a parcela quando m = j, resumindo-se
a
∂ ρ¯ai (w(k) )
∂ (k)
∆wj , (1.27)
∂∆wj ∂wj
o que resulta em
∂ ρ¯ai (w(k) )
. (1.28)
∂wj
19
Substituindo esse resultado na equação 1.26 encontra-se a equação dos parâmetros w(k)
que minimizam E 2 , dada por
L 2n−1
!
∂ ρ¯ai (w(k) )
X
(k)
X
(k) ∂ (k)
ρai − ρ¯ai (w )− ∆wm ρ¯a (w ) = 0, (1.29)
i=1 m=1
∂wm ∂wj i
L
X
(k)
∂ (k)
ρai − ρ¯ai (w ) ρ¯a (w ) =
i=1
∂wj i
L 2n−1
X ∂ ρ¯a (w(k) )
X
i (k) ∂ (k)
∆wm ρ¯ai (w ) (1.30)
i=1 m=1
∂w m ∂w j
ou na forma matricial
2n−1
X
(k)
αj = Gmj ∆wm , (1.31)
m=1
com i = 1, . . . , L, onde
L
X
(k)
∂ (k)
αj = ρai − ρ¯ai (w ) ρ¯a (w ) (1.32)
i=1
∂wj i
e
L
X ∂ (k) ∂ (k)
Gmj = ρ¯a (w ) ρ¯a (w ) . (1.33)
i=1
∂wm i ∂wj i
A solução da equação 1.31 será um vetor com valores de ∆wj que representa as pe-
quenas variações feitas nas resistividades e espessuras do modelo, de modo a encontrar nu-
mericamente valores ideais que minimizem a diferença entre os dados calculados e os dados
observados, ou seja, o vetor w(k+1) é estimado com
(k)
onde ∆w(k) é o vetor formado pelos elementos ∆wm , solução do sistema de equações 1.31.
Capítulo 2
Processamento de Dados
Desempenho
20
21
velocidade de execução. Logo, não é adequada para cálculos numéricos pesados como os que
são feitos em geofísica.
Fortran foi criado para lidar especificamente com programação científica e surgiu como
uma das primeiras linguagens de programação, senão a primeira, sendo bem próxima de
Assembly. Assim, se traduz em comandos básicos do computador de forma mais eficiente do
que as linguagens de alto nível mais recentes, resultando em processamentos mais rápidos.
Biblioteca
Por ser uma linguagem que perdura a décadas, há uma grande quantidade de códigos para
problemas matemáticos e físicos que já foram escritos em Fortran, o que facilita o desenvol-
vimento de novos programas. Além disso, alunos podem usar códigos já existentes desenvol-
vidos por seus professores, poupando tempo na implementação e identificação de erros nos
programas. O que cientistas da computação falham em perceber é que pesquisadores estão
mais interessados em resolver um problema científico do que desenvolver códigos atraentes.
Assim, utilizar um código já escrito, mesmo que antigo, é mais vantajoso do que reescrevê-lo
em outra linguagem.
Sintaxe
Como seu próprio nome indica, o Fortran (acrônimo de Formula Translator) foi criado para
aqueles que buscam programar para resolver problemas de cálculos, sendo ideal para mate-
máticos, físicos e geocientistas. É uma linguagem de programação procedural e mais simples
de ser aprendida do que, por exemplo, linguagens orientadas a objeto, que são mais abstra-
tas. A sintaxe do Fortran permite que vetores e matrizes possam ser copiados, multiplicados
ou manipulados de forma bastante intuitiva. Por esse motivo, Fortran é muito indicado para
estudantes como linguagem introdutória, diferente de C e C++, que, por outro lado, até
mesmo em cursos de ciências da computação são ensinados depois de linguagens como Java
e Python.
Segurança
Fortran tem ferramentas que auxiliam o compilador proporcionando códigos mais confiáveis.
Um exemplo disso é a opção intent, que não permite uma variável assumir outro valor
durante a execução. Isso parte do princípio que Fortran não admite que exista sobreposição
em seu código, dessa forma, caso ocorra o compilador reportará um erro.
22
Software Livre
Enquanto muitos softwares, como o Matlab, são comerciais, Fortran continua sendo um
software livre e conta com bons compiladores baratos ou gratuitos, como o gfortran, que foi
o compilador utilizado nesse trabalho.
Funções
Funções são similares a subrotinas em muitos aspectos, mas elas podem ser chamadas dentro
de uma expressão e retornar um valor que pode ser usado dentro da própria expressão (Met-
calf et al., 2018). Neste sentido, uma função em Fortran moderno age como uma função em
análise matemática. Uma função retorna um único valor, o qual pode ser um escalar ou uma
matriz, se declarada como tal, e pode inclusive servir de argumento para uma outra rotina.
Outro aspecto interessante de uma função, e de uma subrotina, é de ela poder ser recursiva,
isso ocorre quando uma função chama a si mesma, seja de forma direta ou indireta, e foi
introduzido na versão Fortran 90.
Módulos
É comum em programas de geofísica que contêm parâmetros, variáveis ou rotinas que pre-
cisem ser compartilhados para outras unidades. Para essa situação, o Fortran oferece os
módulos, que funcionam como um pacote onde se pode agrupar e armazenar definições, fun-
ções e subrotinas, permitindo dividir o programa principal em vários arquivos separados que
23
são compilados individualmente. Além disso, é possível alterar o módulo sem modificar o
programa que o usa, evitando assim que hajam alterações acidentais dos dados.
Os módulos são muito convenientes de serem usados para definir dados globais, o que
torna suas variáveis e subrotinas acessíveis ao programa que o usa. Porém, também é possível
controlar a acessibilidade do código: se uma variável ou rotina for declarada como privada,
então ela não estará disponível fora dele.
Num programa, é possível adicionar quantos módulos forem necessários e eles podem ser
usados por vários programas diferentes e várias vezes pelo mesmo programa. A praticidade
de se transferir dados entre subprogramas permite organizar a arquitetura de programas
grandes e complexos, como muito frequentemente são os vistos em geofísica.
Submódulos
Na versão Fortran 2008 foi introduzida uma nova unidade de programa chamada de submó-
dulo, que permite que os módulos sejam divididos em unidades diferentes que podem estar
em arquivos separados. Nessa separação, as definições de variáveis permanecem no módulo
enquanto o corpo contendo os passos do algoritmo é realocado para os submódulos. Isso se
torna conveniente para organizar a arquitetura do programa com módulos extensos, minimi-
zar erros e tempo de programação, já que uma mudança num submódulo não interfere nas
unidades fazem uso dele e, dessa forma, não precisam ser compiladas novamente (Metcalf
et al., 2018).
Nos comandos acima, a opção -a se refere ao arranjo de eletrodos que pode ser wenner,
para o arranjo Wenner, schlum, para o arranjo Schlumberger teórico, e schlumpr, para o
arranjo Schlumberger prático. A opção -s deve ser utilizada apenas se o operador estiver
trabalhando com dados sintéticos, assim o programa fará uma modelagem direta para gerar
dados de campo sintéticos antes de realizar a inversão.
24
n
ρ1 h1
ρ2 h2
.. ..
. .
ρn−1 hn−1
ρn
a1 b1 ρa1
a2 b2 ρa2
a3 b3 ρa3
.. .. ..
. . .
aL bL ρaL
Figura 2.2: Representação do arquivo contendo os dados de campo para o arranjo Sch-
lumberger.
Inversão
Modelo estimado
Modelagem
Dado calculado
Inversão
Modelo estimado
Modelagem
Dado calculado
4. Calcular αj .
5. Calcular Gmj .
(k)
6. Inverter a matriz Gmj e achar ∆wm que soluciona a equação 1.31.
7. Atualizar w.
(k)
8. Refazer os passos de 2 a 6 até que ∆wm seja suficientemente pequeno e/ou se atinja
as condições de saída.
Resultados
Nesse capítulo serão mostrados os resultados obtidos a fim de testar o programa em diversas
situações. Primeiramente serão tratadas simulações feitas com dados sintéticos e na seção
seguinte, com dados reais.
27
28
Tabela 3.1: Valores do modelo de teste com três camadas e arranjo Wenner.
100
Resistividade (Ωm)
10
Legenda
Modelo teórico
Modelo inicial
Modelo estimado
Dado sintético
Dado não corrigido
Dado calculado
1
1 10 100
Profundidade (m)
Figura 3.1: Resultado da inversão do modelo sintético de três camadas da Tabela 3.1
usando arranjo Wenner.
29
Tabela 3.2: Valores do modelo de teste com três camadas e arranjo Schlumberger teórico.
100
Resistividade (Ωm)
10
Legenda
Modelo teórico
Modelo inicial
Modelo estimado
Dado sintético
Dado não corrigido
Dado calculado
1
1 10 100
Profundidade (m)
Figura 3.2: Resultado da inversão do modelo sintético de três camadas da Tabela 3.2
usando arranjo Schlumberger teórico.
30
Tabela 3.3: Valores do modelo de teste com três camadas e arranjo Schlumberger prático,
em que b = 0, 01a.
100
Resistividade (Ωm)
10
Legenda
Modelo teórico
Modelo inicial
Modelo estimado
Dado sintético
Dado não corrigido
Dado calculado
1
1 10 100
Profundidade (m)
Figura 3.3: Resultado da inversão do modelo sintético de três camadas da Tabela 3.3
usando arranjo Schlumberger prático, em que b = 0, 01a.
31
100
Resistividade (Ωm)
10
Legenda
Modelo teórico
Modelo inicial
Modelo estimado
Dado sintético
Fator de aleatoriedade = 2 Dado não corrigido
Dado calculado
1
1 10 100
Profundidade (m)
Figura 3.4: Resultado da inversão do modelo sintético da Tabela 3.4 usando arranjo
Wenner e fator de aleatoriedade 2.
33
100
Resistividade (Ωm)
10
Legenda
Modelo teórico
Modelo inicial
Modelo estimado
Dado sintético
Dado não corrigido
Dado calculado
1
1 10 100
Profundidade (m)
Figura 3.5: Resultado da inversão do modelo sintético da Tabela 3.5 usando arranjo
Wenner e considerando dados de campo com 21 observações.
34
Tabela 3.6: Dados de campo com arranjo Wenner de Malagash, Nova Escócia.
Modelo estimado
n ρ (Ωm) h (m)
1 28,2 128,8
2 63,4 -
Tabela 3.7: Modelos estimado após inversão dos dados de campo de Malagash, Nova
Escócia, usando arranjo Wenner.
100
Resistividade (Ωm)
10
Legenda
Modelo inicial
Modelo estimado
Dado observado
Dado calculado
1
100
Profundidade (m)
Figura 3.6: Resultado da inversão de dados de campo de Malagash, Nova Escócia, usando
arranjo Wenner.
36
Tabela 3.8: Dados de campo do Instituto de Letras da UFBA coletados com arranjo
Schlumberger em março de 1998 e maio de 1999.
Tabela 3.9: Modelos estimados após inversão dos dados de campo coletados em 1998.
100
Resistividade (Ωm)
Legenda
Dado observado
Schlumberger pratico
Schlumberger teórico
10
1 10 100
Profundidade (m)
Figura 3.7: Comparação entre as inversões dos dados de campo de 1998 para os arranjos
Schlumberger prático e teórico.
quatro camadas e observando os gráficos da Figura 3.7 é possível perceber que os dados
calculados se assemelham aos dados observados, seja considerando o arranjo Schlumberger
prático ou teórico, os quais produziram modelos estimados relativamente parecidos.
Os dados coletados em 1999, mostrados na Tabela 3.8, foram trabalhados considerando
um modelo de cinco camadas e através da Figura 3.8 verifica-se que novamente a semelhança
entre os dados calculados para os arranjos Schlumberger prático ou teórico e os dados obser-
vados pela aquisição. No entanto, observando os modelos estimados contidos na Tabela 3.10,
nota-se que a segunda camada atingiu valores muito altos de resistividade para o arranjo
Schlumberger prático. Isso pode ser explicado pelo fato da espessura atribuída ter sido muito
pequena, o que sugere que um modelo de quatro camadas seja mais adequado para o local
38
Tabela 3.10: Modelos estimados após inversão dos dados de campo coletados em 1999
com cinco camadas.
100
Legenda
Dado observado
Schlumberger pratico
Schlumberger teórico
Resistividade (Ωm)
10
1 10 100
Profundidade (m)
Figura 3.8: Comparação entre as inversões dos dados de campo de 1999 para os arranjos
Schlumberger prático e teórico considerando um modelo de cinco camadas.
estudado.
A fim de testar essa hipótese, os dados foram recalculados considerando uma camada a
menos e os resultados podem ser vistos na Tabela 3.11 e Figura 3.9. De acordo com o relatório
de dados de campo, houve um grande volume de chuva nos dias anteriores à aquisição de
maio de 1999. Dessa forma, é compreensível que os dados dessa segunda aquisição apresentem
resistividades mais baixas nas camadas mais superficiais e se sustenta a hipótese que um
modelo de quatro camadas é mais apropriado para a área em questão.
39
Tabela 3.11: Modelos estimados após inversão dos dados de campo coletados em 1999
com quatro camadas.
100
Legenda
Dado observado
Schlumberger pratico
Schlumberger teórico
Resistividade (Ωm)
10
1 10 100
Profundidade (m)
Figura 3.9: Comparação entre as inversões dos dados de campo de 1999 para os arranjos
Schlumberger prático e teórico considerando um modelo de quatro camadas.
Capítulo 4
Conclusões
O estudo bibliográfico que direcionou esse trabalho permitiu assegurar que os métodos elé-
tricos possuem ampla utilização em diversas áreas, e dentre eles a eletrorresistividade é con-
siderada uma das técnicas mais eficazes para a geofísica de exploração. É necessário destacar
a obra de Telford et al. (1990) como principal guia para a compreensão dos fundamentos
teóricos acerca do método, e a obra de Metcalf et al. (2018) por fornecer esclarecimentos
quanto às novas ferramentas propostas pelo Fortran moderno, em especial os submódulos.
O segundo capítulo abordou uma questão pertinente no âmbito acadêmico e foram
discutidas as vantagens do uso do Fortran moderno pela comunidade científica, comparando-
o à outras linguagens mais recentes e adotadas por cientistas da computação, como C, C++
e Python. No desenvolvimento desse trabalho concluiu-se que longe de ser uma linguagem
antiquada, o Fortran se manteve atualizado e suas novas ferramentas possibilitam um melhor
ordenamento das unidades de programas, proporcionando mais velocidade de processamento
e simplicidade de execução, os quais são fatores indispensáveis para programação científica
de alto desempenho, que é o caso dos problemas geofísicos, incluindo a inversão de dados de
eletrorresistividade 1d, que é o foco desse trabalho.
Reproduzir a subsuperfície com propriedade é o desafio da geofísica aplicada, e, nesse
contexto, o tratamento dos dados através de técnicas de processamento são indispensáveis. A
inversão geofísica permite recuperar os parâmetros que causaram as pertubações medidas na
aquisição, e dentre as técnicas existentes a inversão 1d não deve ser menosprezada diante dos
avanços tecnológicos que permitem imageamentos mais elaborados. É importante considerar
que levantamentos dessa natureza são mais comuns, baratos e fáceis de serem realizados,
além de fornecerem importantes orientações iniciais para modelos mais complexos.
O terceiro capítulo tratou de testar o programa desenvolvido em uma série de diferen-
tes situações, onde foram utilizados dados sintéticos e dados reais. As simulações com dados
sintéticos evidenciam que o programa foi capaz de recuperar o modelo original teórico com
40
41
alto nível de propriedade para o caso com três camadas (em todos os arranjos propostos),
para um modelo inicial com alto nível de erro e para uma aquisição simulada com poucas
observações. Da mesma forma, ao realizar a inversão com dados reais, os modelos estima-
dos foram coerentes em todas as situações apresentadas e foi possível estimar um modelo
geológico compatível com os locais estudados.
Por fim, é interessante destacar que o programa em questão possibilita alta interação
com o usuário, o qual tem permissão de alterar parâmetros iniciais da inversão. Isso permite
que ele seja utilizado por estudantes que procuram compreender o comportamento da ele-
trorresistividade em diferentes tipos de modelos com variados arranjos na aquisição. Além
disso, fato dos softwares utilizados, Fortran e Gnuplot, serem softwares livres sustenta ainda
mais a colocação anterior.
Agradecimentos
Não seria nenhum exagero dizer que esse trabalho não foi feito apenas por mim. Detrás da
caneta que escreveram essas palavras estão as pessoas que me apoiaram antes, durante e até
o final dessa jornada.
Aos meus pais, Eliane e Neuber, e ao meu irmão, Thiago: vocês nunca deixaram de
acreditar em mim, mesmo quando eu mesma não acreditava, nunca duvidaram que eu seria
capaz de superar minhas dificuldades mesmo em meus piores momentos. Não existem pala-
vras para descrever o quanto me sinto grata por ter uma família como a nossa, independente
de nossas diferenças, sou feliz por tê-los ao meu lado e me sinto realizada por poder mostrar
para vocês o resultado do meu esforço.
Aos meus familiares, obrigada pelo encorajamento e fé que tiveram em mim. Agradeço
especialmente a minha tia Pat e ao meu padrinho Moraes pelos conselhos, apoio e por sempre
terem sido prestativos comigo.
Aos amigos, o meu muitíssimo obrigada por me acompanharem durante todo esse pro-
cesso, pela torcida constante, pela compreensão nas horas em que estive ausente, pelos ou-
vidos emprestados nas horas difíceis e pelos bons momentos vividos. É comprometedor “dar
nomes aos bois”, mas não posso deixar de agradecer a Daniel Castro e Lara Castro, meus
amigos do peito, e a Gangue; Rafael Rigaud, amigo de viagens, aventuras e crimes perfeitos;
Tatiane Nicchetti, por todo seu carinho e amizade; Betina e Alex, meu casal favorito; Daniel
Montenegro, mesmo sendo um ser humano horrível; Gabriel e Dinny, que me acompanham
desde o começo; Shú Giffoni, pela paciência e fornecimento de doces; amigos da Uptime,
especialmente Carol Pessôa, pela companhia e conselhos; aos meus queridos Alcides, Carlos,
Carlinhos e Rafa do 302, minha segunda família que mesmo distante, guardo no coração;
meus colegas de curso, em especial a turma de 2012; Rigmary, pela companhia diária durante
esse período; e às minhas amigas da trindade e da comunidade, por serem minha torcida mais
animada e dedicada.
To my dear Thomas. It wouldn’t have been possible without your endless support. I am
grateful for your love, patience and for always cheering me up whenever I felt discouraged.
Agradeço também aos professores Joelson Batista e Suzan Vasconcelos, por aceitarem
42
43
Anderson, W. L. (1975) Improved digital filters for evaluating Fourier and Hankel transform
integrals, Rel. Téc. PB 242 800, US Geolog. Survey.
Blakely, R. J. (1995) Potential theory in gravity and magnetic applications, Stanford-
Cambridge Program, Cambridge Un. Press, Cambridge.
Elton, D. C. (2015) Why physicists still use fortran, http://moreisdifferent.com/, Acessado
em 06-dez-2018.
Gaelzer, R. (2005) Introdução ao fortran 90/95, Depart. Física, Inst. Física e Matemática,
Universidade Federal de Pelotas.
Inkscape Project (2007) Inkscape.
Kearey, P.; Brooks, M. e Hill, I. (2009) Geofísica de exploração, Oficina de Textos, São Paulo.
Keller, G. V. e Frischknecht, F. C. (1966) Electrical methods in geophysical prospecting,
Pergamon Press, England.
Metcalf, M.; Reid, J. e Cohen, M. (2018) Modern Fortran Explained: Incorporating Fortran
2018, Numerical Mathematics and Scientific Computation, Oxford Un. Press, Oxford.
Nabighian, M. (1988) Electromagnetic methods in applied geophysics, Electromagnetic
Methods in Applied Geophysics, Society of Exploration Geophysicists, Oklahoma.
Parasnis, D. S. (1962) Principles of applied geophysics, Methuen and Co, London, 1o edic..
Parker, R. L. (1977) Understanding inverse theory, Annual Review of Earth and Planetary
Sciences, 5(1):35–64.
Sato, H. K. (2002) Métodos elétricos: Notas de aula, Depart. Geofísica, Inst. Geociências,
Universidade Federal da Bahia.
Sato, H. K. (2018) Comunicação pessoal, Instituto de Geociências, UFBA, Brasil.
Sen, M. e Stoffa, P. L. (1995) Global optimization methods in geophysical inversion, Advances
in Exploration Geophysics 4, Elsevier, Amsterdam.
44
45
Códigos do programa
A.1 Inversão
Este submódulo realiza a inversão para o arranjo Schlumberger prático. O código para os de-
mais arranjos é idêntico, alterando apenas a função da resistividade aparente que é chamada
na função f_derivada_spr.
A função inversao_spr é uma função lógica que tem como argumentos de entrada o
número máximo de iterações e a variação, que se refere à um pequeno incremento que é dado
ao vetor dos parâmetros w, como explicado na seção 1.2.2. Verificou-se que para a inversão
de dados sintéticos melhores resultados são obtidos com 0,0001% de variação no valor dos
parâmetros, enquanto para dados reais esse valor é 0,000001%. A linha 42 do código abaixo
representa o passo 7 do algoritmo apresentado na seção 2.2.1, onde se calcula a equação 1.34.
A função get_deltaw_spr encontra a solução da equação 1.31, o que é realizado na
linha 69 do código, onde se multiplica a inversa de Gmj por αj . Esses dois últimos são
calculados nas funções matriz_g_spr e alpha_spr, respectivamente, as quais fazem o cálculo
das equações 1.33 e 1.32 que representam os passos 4 e 5 do algoritmo.
A função f_derivada_spr realiza o passo 3 e calcula a derivada apresentada na equa-
ção 1.28, realizando as variações nos parâmetros.
46
47
12 !----------------------------------------------------------------------------
13
14 logical module function inversao_spr(var, it_max)
15
16 ! Arranjo Schlumerger prático
17 ! Essa função faz a soma do vetor w com delta w e atualiza com os novos
18 ! parâmetros
19 !
20 ! it_w = iteração
21 ! it_max = número de iterações máximo
22 ! var = variação dos parâmetros de w
23 !
24
25 integer, intent(in) :: it_max
26 real, intent(in) :: var
27 integer :: it_w, i
28 real, dimension(size(vetor_w)) :: w_anterior
29
30 inversao_spr=.false.
31
32 it_w=1
33
34 do it_w=1, it_max+1
35 if(it_w.eq.it_max+1) then
36 write(0,*)"Numero de iterações máximas alcançado."
37 inversao_spr=.true.
38 return
39 else
40 endif
41 w_anterior=vetor_w
42 vetor_w=vetor_w+get_deltaw_spr(var, it_w)
43 if(vetor_w(1).ne.vetor_w(1))then
44 vetor_w=w_anterior
45 inversao_spr=.true.
46 if((it_w-1).eq.0)then
47 write(0,*)"Não foi possível realizar a inversão."
48 return
49 else
50 write(0,*)"Resultado obtido com ", it_w-1, " iterações."
51 return
52 endif
53 endif
54 enddo
55
56 end function inversao_spr
57
58 !----------------------------------------------------------------------------
59
60 module function get_deltaw_spr(var, it_w)
61
62 !
63 ! Função que faz o cálculo de delta w do arranjo Schlumberger prático.
64 !
65
66 real, intent(in) :: var
67 integer, intent(in) :: it_w
68
69 get_deltaw_spr=matmul(inversa(matriz_g_spr(var, it_w)), alpha_spr(var, it_w))
70
71 end function get_deltaw_spr
72
73 !----------------------------------------------------------------------------
48
74
75 module function alpha_spr(var, it_w)
76
77 !
78 ! Função que calcula o vetor alpha para o arranjo Schlumberger prático.
79 !
80
81 real, intent(in) :: var
82 real :: resis_calculada
83 integer :: i, j
84 real :: aux
85 integer,intent(in) :: it_w
86
87 alpha_spr=0
88
89 do j=1, 2*nlayer-1
90 do i=1, n_obs
91 resis_calculada=resisap_schlumpr(ra(i), rb(i))
92 aux=(resis_obs(i)-resis_calculada)* &
92a f_derivada_spr(j, var, ra(i), rb(i), it_w)
93 alpha_spr(j)=aux+alpha_spr(j)
94 enddo
95 enddo
96
97 end function alpha_spr
98
99 !----------------------------------------------------------------------------
100
101 module function matriz_g_spr(var, it_w)
102
103 !
104 ! Função que faz o cálculo da matriz G do arranjo Schlumberger prático.
105 !
106
107 real , intent(in) :: var
108 integer :: i, j, m
109 real :: aux
110 integer, intent(in) :: it_w
111
112 matriz_g_spr=0
113
114 do m=1, 2*nlayer-1
115 do j=1, 2*nlayer-1
116 do i=1, n_obs
117 aux=f_derivada_spr(m, var, ra(i), rb(i), it_w)
118 aux=aux*f_derivada_spr(j, var, ra(i), rb(i), it_w)
119 matriz_g_spr(m, j)=aux+matriz_g_spr(m, j)
120 enddo
121 enddo
122 enddo
123
124 end function matriz_g_spr
125
126 !----------------------------------------------------------------------------
127
128 real module function f_derivada_spr(npar, var, ra, rb, it_w)
129
130 !
131 ! Essa função calcula a derivada parcial quando se faz uma pequena variação
132 ! em um parâmetro.
133 !
134 ! npar = número do parâmetro (1:2*nlayer-1) do qual se quer a derivada
49
A.2 Modelagem
Este programa realiza a modelagem para o arranjo Schlumberger prático. O código para
os demais arranjos é idêntico, alterando apenas a função resisap_schlumpr que calcula a
resistividade aparente e é usada nas linhas 68 e 85 do código abaixo.
1 program modela_schlumpr
2
3 !============================================================================
4 !
5 ! Programa que faz modelagem de dados de eletrorresistividade para o arranjo
50
68 rho_campo=resisap_schlumpr(ra,rb)
69 rb=rb/2
70 write(6,*)ra, rb, rho_campo
71 ra=ra*fator_espacamento
72 enddo
73 elseif(n_obs.ge.3) then
74 ! Fazendo o cálculo da resistividade aparente para dado real:
75 allocate(a(n_obs), b(n_obs))
76 read(10,*)(a(i), b(i), i=1, n_obs)
77 if(minval(a).le.0.or.minval(b).le.0) then
78 write(0,*)"Os valores do espaçamento devem ser positivos."
79 stop "Erro na modelagem."
80 endif
81 b=b*2
82 close(10)
83 ! Resistividade aparente:
84 do i=1,n_obs
85 rho_campo=resisap_schlumpr(a(i),b(i))
86 b(i)=b(i)/2
87 write(6,*)a(i), b(i), rho_campo
88 enddo
89 else
90 write(0,*)"Número de observações insuficiente."
91 stop "Erro na modelagem."
92 endif
93
94 !----------------------------------------------------------------------------
95
96 end program modela_schlumpr
1 module kernel
2 ! desenvolvido por Marina Borja, UFBA (dez/2018)
3 !===========================================================================
4 !
52
67 !
68
69 real, intent(in) :: a, b
70 real :: temp1, rhank1
71 integer :: ll1, ll2
72
73 temp1=rhank1(alog(a), integrando_s, 1e-8, ll1)/a
74 resisap_schlum=resistividade(1)*(1+a*a*(temp1))
75
76 end function resisap_schlum
77
78 !---------------------------------------------------------------------------
79
80 real function resisap_schlumpr(a,b)
81
82 !
83 ! Essa função calcula a resistividade aparente para o arranjo Schlumberger
84 ! teórico.
85 ! Utiliza a função rhank0.
86 !
87 ! a = AB/2
88 ! b = MN/2
89 !
90
91 real, intent(in) :: a, b
92 real :: temp1, temp2, rhank0
93 integer :: ll1, ll2
94
95 temp1=rhank0(alog(a-(b/2)), integrando_w, 1e-8, ll1)/(a-(b/2))
96 temp2=rhank0(alog(a+(b/2)), integrando_w, 1e-8, ll1)/(a+(b/2))
97 resisap_schlumpr=resistividade(1)*(1+(((a*a)/b)-(b/4))*(temp1-temp2))
98
99 end function resisap_schlumpr
100
100 !---------------------------------------------------------------------------
101
102 real recursive function funcao_f(indice, lambda) result (resultado)
103
104 !
105 ! Função recursiva que soluciona G e F da expressão da resistividade
106 ! aparente deselvolvida por H. K. Sato, 2018.
107 !
108
109 real, intent(in):: lambda
110 integer, intent(in) :: indice
111 real :: aux, g
112
113 if(indice.ge.nlayer-1) then
114 resultado=1
115 elseif(indice.ge.0) then
116 aux=contraste(indice+1)*funcao_f(indice+1,lambda)
117 g=(1-aux)/(1+aux)
118 aux=g*exp(-2*lambda*espessura(indice+1))
119 resultado=(1-aux)/(1+aux)
120 else
121 stop "Erro em Kernel."
122 endif
123
124 end function funcao_f
125
126 !---------------------------------------------------------------------------
127
54