Você está na página 1de 55

UNIVERSIDADE FEDERAL DA BAHIA

INSTITUTO DE GEOCIÊNCIAS

CURSO DE GRADUAÇÃO EM GEOFÍSICA

GEO213 – TRABALHO DE GRADUAÇÃO

Modelagem e inversão de
eletrorresistividade 1d usando
Fortran moderno: arranjos Wenner
e Schlumberger

MARINA SILVA BORJA

SALVADOR – BAHIA
DEZEMBRO – 2018
Modelagem e inversão de eletrorresistividade 1d usando Fortran moderno:

arranjos Wenner e Schlumberger

por

Marina Silva Borja

Orientador: Prof. Dr. Hédison Kiuity Sato

GEO213 – TRABALHO DE GRADUAÇÃO

Departamento de Geofísica

do

Instituto de Geociências

da

Universidade Federal da Bahia

Comissão Examinadora

Dr. Hédison Kiuity Sato

Dr. Joelson da Conceição Batista

Dra. Suzan Souza de Vasconcelos

Data da aprovação: 28/dez/2018


"There are no shortcuts to any
place worth going."
(Beverly Sills)
Resumo

São apresentados os conceitos teóricos da eletrorresistividade, a solução da resistividade


aparente para o modelo geoelétrico de n camadas horizontais homogêneas para os arran-
jos Wenner e Schlumberger teórico e prático, assim como o procedimento de linearização
de equações não lineares através do Método dos Mínimos Quadrados para a realização da
inversão de dados. É feita uma explanação das vantagens do Fortran moderno para a comu-
nidade científica e das novas ferramentas de suas versões mais recentes, onde se destacam os
submódulos. Realizam-se testes do programa desenvolvido para modelos sintéticos e reais,
em que foram consideradas situações hipotéticas possuindo alto nível de erro e poucos dados
observados. Inclui-se também os códigos Fortran para a modelagem e inversão, assim como
o cálculo da resistividade aparente para os arranjos propostos.

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

3.1 Valores do modelo de teste com três camadas e arranjo Wenner. . . . . . . . 28


3.2 Valores do modelo de teste com três camadas e arranjo Schlumberger teórico. 29
3.3 Valores do modelo de teste com três camadas e arranjo Schlumberger prático,
em que b = 0, 01a. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.4 Modelo inicial com fator de aleatoriedade 2. . . . . . . . . . . . . . . . . . . 31
3.5 Modelo inicial com poucas medidas de dados de campo. . . . . . . . . . . . . 31
3.6 Dados de campo com arranjo Wenner de Malagash, Nova Escócia. . . . . . . 34
3.7 Modelos estimado após inversão dos dados de campo de Malagash, Nova Es-
cócia, usando arranjo Wenner. . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.8 Dados de campo do Instituto de Letras da UFBA coletados com arranjo Sch-
lumberger em março de 1998 e maio de 1999. . . . . . . . . . . . . . . . . . . 36
3.9 Modelos estimados após inversão dos dados de campo coletados em 1998. . . 37
3.10 Modelos estimados após inversão dos dados de campo coletados em 1999 com
cinco camadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.11 Modelos estimados após inversão dos dados de campo coletados em 1999 com
quatro camadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

7
Lista de Figuras

1.1 Visão espacial de uma configuração genérica de quatro eletrodos. . . . . . . . 12


1.2 Arranjo Wenner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3 Arranjo Schlumberger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4 Modelo de n camadas horizontais com a fonte na superfície. . . . . . . . . . 16

2.1 Representação do arquivo contendo o modelo inicial. . . . . . . . . . . . . . 24


2.2 Representação do arquivo contendo os dados de campo para o arranjo Sch-
lumberger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3 Fluxograma para processamento de dados sintéticos. . . . . . . . . . . . . . 25
2.4 Fluxograma para processamento de dados reais. . . . . . . . . . . . . . . . . 26

3.1 Resultado da inversão do modelo sintético de três camadas da Tabela 3.1


usando arranjo Wenner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2 Resultado da inversão do modelo sintético de três camadas da Tabela 3.2
usando arranjo Schlumberger teórico. . . . . . . . . . . . . . . . . . . . . . . 29
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. . . . . . . . . . . . 30
3.4 Resultado da inversão do modelo sintético da Tabela 3.4 usando arranjo Wen-
ner e fator de aleatoriedade 2. . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.5 Resultado da inversão do modelo sintético da Tabela 3.5 usando arranjo Wen-
ner e considerando dados de campo com 21 observações. . . . . . . . . . . . 33
3.6 Resultado da inversão de dados de campo de Malagash, Nova Escócia, usando
arranjo Wenner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.7 Comparação entre as inversões dos dados de campo de 1998 para os arranjos
Schlumberger prático e teórico. . . . . . . . . . . . . . . . . . . . . . . . . . 37
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. . 38
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. 39

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

seus casos de estudo.


No presente trabalho, buscou-se desenvolver um programa computacional que realiza a
modelagem e inversão de eletrorresistividade 1d para os arranjos Wenner e Schlumberger. O
programa foi escrito em linguagem Fortran moderna, com a finalidade de ampliar as possi-
bilidades de seu uso, visto que o processamento de dados em geofísica na UFBA, até então,
limita-se às ferramentas fornecidas pela versão Fortran 90. Para a realização desse estudo,
utilizou-se os “softwares” livres Fortran 2008, shell script, Inkscape (Inkscape Project, 2007)
e Gnuplot (Williams e Kelley, 2017).
No primeiro capítulo são tratados os princípios teóricos que fundamentam esse trabalho,
em especial os conceitos de eletrorresistividade e resistividade aparente. Ainda nesse capítulo
é mostrada a teoria de inversão de equações não lineares utilizando o Método dos Mínimos
Quadrados. No segundo capítulo é feita uma análise do uso do Fortran pela comunidade
científica e uma descrição das novas ferramentas propostas pelo Fortran moderno que foram
utilizadas para a implementação do programa desenvolvido. Para o terceiro capítulo realizou-
se diversos testes a fim de verificar a eficácia do código de inversão. Nesse capítulo, são
mostrados os resultados obtidos trabalhando-se com os arranjos Wenner e Schlumberger,
teórico e prático, aplicados a dados sintéticos e reais. Por fim, o apêndice A contém, em sua
integridade, os códigos de modelagem e inversão desenvolvidos pela autora dessa pesquisa.
Capítulo 1

Fundamentação Teórica

A seguir, apresenta-se uma revisão básica de métodos elétricos, em especial o método da


eletrorresistividade. Além disso, há a necessidade de se abordar conceitos de modelagem e
inversão geofísica, os quais são essenciais para o total entendimento da questão tratada nesse
trabalho.

1.1 Métodos Elétricos


A prospecção utilizando métodos elétricos envolve a detecção de efeitos na superfície produ-
zidos por um fluxo de corrente elétrica no solo (Telford et al., 1990), seja de origem natural
ou artificial. Há uma grande variedade de técnicas que são amplamente utilizadas para
realizar levantamentos geofísicos, tais como o potencial espontâneo, polarização induzida e
a eletrorresistividade. Essa última foi a escolhida para a realização desse trabalho e será
melhor explicada na seção seguinte.

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

rAB rAN rMN


Voltímetro
Fonte de Corrente

rBM

rBN
N
B

Figura 1.1: Visão espacial de uma configuração genérica de quatro eletrodos.

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.

1.1.2 Resistividade aparente


Os princípios do método da eletrorresistividade são amplamente discutidos em Keller e Fris-
chknecht (1966), Telford et al. (1990), entre outros. Segundo Keller e Frischknecht (1966), a
abordagem mais simples do estudo teórico da resistividade elétrica das rochas é feita conside-
rando a subsuperfície da Terra como homogênea e isotrópica. Telford et al. (1990) apresenta
uma equação para o potencial elétrico associado a uma fonte de corrente pontual na superfície
de um semi-espaço, escrita como
ρI
, V = (1.1)
2πr
sendo V o potencial elétrico num ponto a uma distância r, I a corrente elétrica e ρ a
resistividade do meio. Considerando a configuração mostrada na Figura 1.1, estabelece-se
que a diferença de potencial entre os eletrodos M e N é dada por
   
Iρ 1 1 1 1
∆V = − − − . (1.2)
2π rAM rBM rAN rBN

Isolando a resistividade nessa equação, se obtém


∆V 2π
ρ= . (1.3)
I {(1/rAM − 1/rBM ) − (1/rAN − 1/rBN )}

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.

1.1.3 Arranjos de eletrodos


A equação 1.4 apresenta o parâmetro fator geométrico K, o qual depende unicamente da
configuração dos eletrodos no momento da aquisição. Segundo Zhdanov (2009), muitos es-
quemas para realizar levantamentos elétricos foram desenvolvidos no início do século XX,
cada um com uma suposta vantagem em relação ao outro. A maioria dos arranjos se ba-
seiam no uso de quatro eletrodos como mostrado na Figura 1.1, dois deles, A e B, usados
para injetar uma corrente elétrica no solo e os outros dois, M e N, usados para a medição da
diferença de potencial elétrico.
Dentre os arranjos mais conhecidos estão os arranjos Wenner, Schlumberger, dipolo-
dipolo e polo-dipolo. No entanto, apenas os arranjos Wenner e Schlumberger serão expli-
citados a seguir, visto que foram os escolhidos nesse trabalho diante de sua relevância nos
estudos de métodos elétricos.

Arranjo Wenner

O arranjo Wenner, representado na Figura 1.2, é uma configuração de eletrodos básica e


bem estabelecida na literatura, no qual são utilizados quatro eletrodos espaçados da mesma
distância a. A corrente é introduzida através dos eletrodos A e B, enquanto a diferença de
potencial elétrico entre os eletrodos M e N é medida. Simplificando a equação 1.3 se obtém
 
∆V
ρa,W = 2πa, (1.5)
I
que se trata da expressão da resistividade aparente ρa para o arranjo Wenner, tendo como
fator geométrico K = 2πa.

Arranjo Schlumberger

Assim como o arranjo Wenner, o arranjo Schlumberger é massivamente referenciado na


literatura e, de acordo com Zhdanov (2009), é o arranjo mais utilizado para a realização de
14

𝚫V

A M N B
a a a

Figura 1.2: Arranjo Wenner.

𝚫V

A M N B
b
a a

Figura 1.3: Arranjo Schlumberger.

sondagens elétricas. Nessa configuração os quatro eletrodos são dispostos simetricamente em


relação ao ponto médio do arranjo, como mostrado na Figura 1.3. Os eletrodos M e N estão
espaçados de uma distância b e medem a diferença de potencial elétrico. Enquanto isso, os
eletrodos A e B são responsáveis por introduzir a corrente no solo, sendo espaçados de uma
distância 2a. Sendo assim, o fator geométrico para essa geometria é representado como sendo
K = π(a2 /b − b/4), e a resistividade aparente por
   2 
∆V a b
ρa,Spr = π − . (1.6)
I b 4

A expressão obtida na equação 1.6 representa o valor da resistividade aparente obtido


na prática, em que se utiliza quatro eletrodos. Outra forma de representar o fator geométrico
desse arranjo é considerando K = πa2 [1 − (b/2a)2 ] /b. Assim, é possível teorizar um cálculo
considerando que o espaçamento entre os eletrodos M e N é ínfimo, a ponto de ser possível
desprezar a parcela (b/2a)2 e obter a relação

∆V πa2
 
ρa,S = , (1.7)
I b

onde o fator geométrico é K = πa2 /b.


Entretanto, tal consideração não é realizada na prática, visto que não seria possível me-
dir a diferença de potencial com eletrodos coincidentes. Sendo assim, para o restante desse
trabalho adotou-se duas disposições para o arranjo Schlumberger: a primeira considerando
o espaçamento entre M e N desprezível, onde se faz valer a equação 1.7, e a segunda con-
15

siderando a disposição de M e N como é realizada na prática, e que é representada pela


equação 1.6.

1.1.4 Modelo geoelétrico de n camadas


Esse trabalho foi realizado utilizando um modelo de n camadas horizontais que pode ser
visto representado na Figura 1.4. Nesse modelo tanto a injeção de corrente quanto a medida
de potencial são feitas no topo da primeira camada, a qual corresponde à superfície da Terra.
A fim de se obter a resistividade aparente que representa o caso citado é necessário calcular o
potencial elétrico correspondente. A solução desse problema pode ser encontrada em Keller
e Frischknecht (1966), Telford et al. (1990) e Sato (2002).
Sato (2002) escreve que, para n camadas horizontais homogêneas de espessura hi e
resistividade elétrica ρi , o potencial elétrico V1 num ponto afastado de r da fonte de corrente
é dado por

1 − G1 e−2λh1
Z
ρ1 I
V1 = J0 (λr)dλ, (1.8)
2π 0 1 + G1 e−2λh1
onde G1 é obtido pelo seguinte processo recursivo:
1 − (ρi+1 /ρi )Fi
Gi = , (1.9)
1 + (ρi+1 /ρi )Fi
1 − Gi+1 e−2λhi+1
Fi = , (1.10)
1 + Gi+1 e−2λhi+1
Gi+1 = . . . , (1.11)
..
. (1.12)
Fn−1 = 1, (1.13)
Gn = 0. (1.14)
R∞
Considerando 0
J0 (λr)dλ = 1/r, o potencial pode ser reescrito como
Z ∞
1 − G1 e−2λh1
  
ρ1 I 1
V1 = + − 1 J0 (λr)dλ . (1.15)
2π r 0 1 + G1 e−2λh1
Essa forma divide o potencial em duas parcelas. A primeira parcela representa o poten-
cial primário no caso de um semi espaço homogêneo com a mesma resistividade da primeira
camada, e a segunda parcela representa o potencial adicional associado às demais camadas.
Interessante destacar que a segunda parcela tende a zero com o aumento da espessura da
primeira camada e que essa forma de representação é vantajosa para a avaliação numérica,
pois ela dá maior estabilidade do que a equação 1.8.
Por fim, a expressão obtida na equação 1.15 pode ser incorporada às equações da resis-
tividade aparente dos arranjos descritos na seção 1.1.3, permitindo reescrever
16

ρ0
z0
Fonte de corrente I
ρ1
z1

ρ
z2

zi ρi

zn−1 ρn−1

ρn

+z

Figura 1.4: Modelo de n camadas horizontais com a fonte na superfície.

• para o arranjo Wenner:



1 − G1 e−2λh1
 Z   
ρa,W = ρ1 1 + 2a − 1 [J0 (λa) − J0 (λ2a)]dλ , (1.16)
0 1 + G1 e−2λh1

• para o arranjo Schlumberger Prático:


Z ∞
1 − G1 e−2λh1
  2 
a b 
ρa,Spr = ρ1 1 + − −2λh
− 1 J0 (λ(a − b/2))
b 4 0 1 + G1 e 1


− J0 (λ(a + b/2)) dλ , (1.17)

• e para o arranjo Schlumberger Teórico:


Z ∞
1 − G1 e−2λh1
  
2
ρa,S = ρ1 1 + a − 1 λJ1 (λa)dλ . (1.18)
0 1 + G1 e−2λh1

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

levantamentos feitos na superfície, como a eletrorresistividade, ou sobre ela, para métodos


aerogeofísicos.
Sen e Stoffa (1995) classificam os métodos de inversão em duas categorias: inversão
direta ou inversão dos parâmetros do modelo. No primeiro caso, um operador matemático
é escolhido e aplicado ao dado observado para se recuperar o modelo geológico, como, por
exemplo, é feito na migração sísmica. O segundo caso é um procedimento em que dados sin-
téticos são gerados a partir de um suposto modelo e comparados com dados reais observados
na aquisição. Se a comparação entre os dois for aceitável, o modelo é adotado como solução.
Caso contrário, o modelo é alterado, os cálculos são refeitos e comparados novamente com as
observações. Essa técnica é repetida automática e iterativamente até que seja encontrado um
modelo cujos dados gerados sinteticamente sejam compatíveis com os dados observados (Sen
e Stoffa, 1995). O último caso explicado é o que se aplica a esse trabalho.

1.2.2 Inversão de problemas não lineares


A maioria dos problemas geofísicos são não lineares e uma forma de solucioná-los é pela
linearização. Essa seção é inspirada em diversos textos de livros e artigos, especialmente em
Blakely (1995).
A resistividade aparente ρa definida na seção 1.1.4 depende dos valores do espaçamento
entre os eletrodos a, da resistividade ρi de cada camada e sua espessura hi correspondente.
Sendo n o número de camadas do modelo geológico, então a equação

ρai = f (ai , ρ1 , h1 , ρ2 , h2 , . . . , ρn−1 , hn−1 , ρn ) (1.19)

ilustra a relação de dependência de todas as i medidas de resistividade aparente obtidas no


levantamento, as quais variam de acordo com i = 1, 2, . . . , L, ou seja, L observações.
O procedimento de inversão consiste em estimar valores de ρi e hi que minimizem a
diferença entre a resistividade aparente observada ρai e a resistividade aparente calculada
ρ¯ai . O erro quadrático entre as resistividades aparentes é dado por
L
X
E2 = (ρai − ρ¯ai )2 , (1.20)
i=1

e o que se busca é obter um conjunto de ρi e hi que o minimize.


Uma forma de se resolver esse problema é utilizando o Método dos Mínimos Quadra-
dos. Entretanto, ρai é uma função não linear, logo esse método não pode ser diretamente
utilizado. No entanto, se forem consideradas pequenas variações para cada parâmetro ρi e
hi a função pode ser considerada linear. A Série de Taylor é uma maneira eficaz de realizar
18

esse procedimento, e para uma única variável ela é dada por



X
f (x) = an (x − x0 )n , (1.21)
n=0

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

Para se obter o vetor w minimizador de E 2 é necessário calcular a derivada parcial


do erro quadrático E 2 em relação à variação de cada um dos seus parâmetros wj , com
j = 1, 2, . . . , 2n − 1, e igualar a zero cada uma das equações. Calculando-se ∂E 2 /∂∆wj = 0,
obtém-se !2
L 2n−1
X ∂ ρ¯a (w(k) )
∂ X (k) i (k)
ρai − ρ¯ai (w ) − ∆wm = 0. (1.25)
∂∆wj i=1 m=1
∂w m

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

sendo possível reescrevê-la como

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

w(k+1) = w(k) + ∆w(k) , (1.34)

(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

2.1 Por que Fortran?


O amplo uso de Fortran pela comunidade científica é algo que intriga programadores de outras
áreas, que argumentam que a linguagem é antiga e ultrapassada. O Fortran foi desenvolvido
na década de 50 e sua primeira versão foi oficialmente lançada em 1966, sendo uma das
primeiras linguagens de programação a ser desenvolvida, o que torna válido o argumento de
que Fortran é antigo.
No campo da computação de alto desempenho, em que há cálculos numéricos em grande
escala, existem duas linguagens que são extensivamente usadas atualmente: C++ e “Fortran
moderno”, esse último consiste das versões a partir do Fortran 90. Além dessas, há também
outras linguagens mais recentes que disputam a preferência dos cientistas, como Python, R
e Matlab, o que levanta o questionamento da insistência no uso do Fortran para pesquisa
científica.
Entretanto, contrariando a opinião de muitos cientistas da computação, o Fortran não
é uma linguagem ultrapassada ou desatualizada. Isso se deve a uma série de revisões feitas
em suas versões, sendo a última em 2018, que incrementaram sua capacidade e o mantive-
ram competindo com várias gerações de concorrentes. Sendo assim, apesar de mais de meio
século de existência, continua sendo uma das principais linguagens usadas em programação
científica, numérica e aplicada de alto desempenho (Metcalf et al., 2018).

Desempenho

Elton (2015) estudou o desempenho de diversas linguagens de programação e relata que


fazendo uma comparação, Python chega a ser cerca de cem vezes mais lento que Fortran
moderno ou C++. Tal resultado é esperado por conta de Python não ser uma linguagem
compilada e sim interpretada, mais simples e rápida para escrever, porém perdendo em

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.

2.1.1 Unidades de programa


É possível escrever um programa completo em Fortran num único arquivo, contudo, se o
código for suficientemente complexo, pode ser necessário e recomendável que um determinado
conjunto de instruções seja realizado repetidas vezes, em pontos distintos do programa.
Cada uma das unidades de programa corresponde a um conjunto completo e consistente de
tarefas que podem ser, idealmente, escritas, compiladas e testadas individualmente, sendo
posteriormente incluídas no programa principal para gerar um arquivo executável (Gaelzer,
2005).
Em Fortran moderno, existem, ao todo, quatro unidades distintas de programa: pro-
grama principal, rotinas externas (subrotinas e funções), módulos e submódulos. Subrotinas
são amplamente utilizadas no processamento de dados geofísicos realizado no Departamento
de Geofísica da UFBA, enquanto módulos, submódulos e funções estão longe de serem tão
aplicados. Esse trabalho procurou explorar mais essas três unidades, que serão brevemente
explicadas a seguir.

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).

2.2 O programa desenvolvido


O programa foi desenvolvido utilizando Fortran 2008 e script shell, podendo ser usado para
tratar duas situações: dados sintéticos e dados reais. Em apenas uma linha de comando num
terminal Linux o usuário realiza a inversão ao fornecer: o arranjo dos eletrodos, a opção do
dado ser sintético ou real, o modelo inicial e (se houver) dados observados.

sh programa_inversao.sh -a schlum -s modelo_teorico.dat


sh programa_inversao.sh -a schlum modelo_inicial.dat dado_observado.dat

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

Figura 2.1: Representação do arquivo contendo o modelo inicial.

A seguir o operador deve referenciar os arquivos de entrada. Para o dados sintéticos


é necessário introduzir apenas o modelo teórico, enquanto para dados reais é necessário
adicionar também o arquivo contendo os dados de campo.
O modelo deve estar em um arquivo de extensão .dat e conter em sua primeira linha
o número total de camadas, seguido das resistividades e espessuras nas linhas seguintes,
como mostrado na Figura 2.1. Lembrando que a espessura da última camada não deve ser
colocada, visto que ela não existe, como foi mostrado na Figura 1.4.
A partir do modelo teórico, um segundo programa (gerador_aleatorio.f08) irá gerar
o modelo inicial aleatório para que seja realizada a inversão. O objetivo desse programa é
simular uma escolha de modelo inicial por parte do operador e dar início aos cálculos de
inversão a partir dele.
Posteriormente, a modelagem direta é feita a fim de obter dados de campo sintéticos
que simulem uma aquisição real. Para isso foi utilizado um programa de modelagem, cujo
código pode ser encontrado no Apêndice A.2. O modelo inicial e os dados de campo sintéticos
são usados pelo programa principal que realiza a inversão dos dados. Dessa inversão é obtido
o modelo estimado, o qual é utilizado para fazer uma nova modelagem e obter os dados de
campo calculados. O fluxograma na Figura 2.3 ilustra o procedimento realizado.
Por fim, pode-se medir a confiabilidade da inversão comparando os dados de campo
observados com os dados de campo calculados, se ambos forem suficientemente próximos a
inversão é considerada como satisfatória. O programa desenvolvido automatiza essa com-
paração iterativamente de forma a retornar ao operador o modelo estimado que mais se
aproxima do modelo real.
Para dados reais, o procedimento é idêntico, como pode ser visto no fluxograma da
Figura 2.4, porém os dados observados são aquisições reais e não gerados computacional-
mente como no caso anterior. Os dados devem estar contidos num arquivo de extensão .dat,
sendo formado por colunas que contém os valores dos espaçamentos entre eletrodos e as re-
sistividades aparentes observadas. Para o arranjo Wenner o dado conterá apenas o valor do
25

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.

Gerador Modelo teórico Modelagem

Modelo inicial Dado observado

Inversão

Modelo estimado

Modelagem

Dado calculado

Figura 2.3: Fluxograma para processamento de dados sintéticos.

espaçamento a, enquanto para o arranjo Schlumberger deve conter também os espaçamento


b, como mostrado na Figura 2.2.

2.2.1 Passos do algoritmo


O algoritmo foi implementado para reproduzir as deduções feitas na seção 1.2.2. Foram
realizados os seguintes passos:
26

Modelo inicial Dado observado

Inversão

Modelo estimado

Modelagem

Dado calculado

Figura 2.4: Fluxograma para processamento de dados reais.

1. Escolher um modelo inicial e criar um vetor w = (ρ1 , h1 , ρ2 , h2 , . . . , ρn−1 , hn−1 , ρn ).

2. Calcular ρ¯ai (w(k) ).

3. Calcular as derivadas ∂ ρ¯ai (w(k) )/∂wm .

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.

O algoritmo acima foi implementado para os arranjos Wenner e Schlumberger, teórico


e prático. O código encontra-se no Apêndice A.1 e o passo 2 no Apêndice A.3.
Capítulo 3

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.

3.1 Dados Sintéticos

3.1.1 Modelo de três camadas


O primeiro teste foi feito para o arranjo Wenner, utilizando o modelo teórico de três ca-
madas cujos parâmetros são mostrado na Tabela 3.1. Seguindo o fluxograma apresentado
na Figura 2.3, foi realizado a modelagem direta desse modelo a fim de se gerar dados de
campo sintéticos. Para determinar o modelo inicial mostrado na mesma tabela, foi utilizado
um programa que altera aleatoriamente os parâmetros do modelo teórico. Nessa inversão
sintética o usuário tem a liberdade de determinar o espaçamento a inicial entre os eletrodos,
na forma de uma progressão geométrica (PG), e o fator de progressão.
Feito isso, o programa gera o modelo estimado para essa configuração e faz uma nova
modelagem para obter os dados calculados. Isso pode ser visto no gráfico da Figura 3.1, onde
se constata que os dados foram invertidos satisfatoriamente.
Esse mesmo procedimento foi realizado para os arranjos Schlumberger teórico e prático,
também utilizando o modelo teórico apresentado nas Tabelas 3.2 e 3.3, respectivamente. O
resultado da inversão pode ser visto nas Figuras 3.2 e 3.3, onde verifica-se sua coerência e se
percebe a grande semelhança entre os resultados para os dois arranjos.

27
28

Modelo teórico Modelo inicial Modelo estimado


n ρ (Ωm) h (m) ρ (Ωm) h (m) ρ (Ωm) h (m)
1 20 3 17,4 3,3 20,0 3,0
2 2,5 10 2,2 9,2 2,4 9,9
3 50 - 48,0 - 49,9 -

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

Modelo teórico Modelo inicial Modelo estimado


n ρ (Ωm) h (m) ρ (Ωm) h (m) ρ (Ωm) h (m)
1 20 3 22,9 3,2 20,0 2,9
2 2,5 10 2,7 8,6 2,5 10,0
3 50 - 57,0 - 49,9 -

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

Modelo teórico Modelo inicial Modelo estimado


n ρ (Ωm) h (m) ρ (Ωm) h (m) ρ (Ωm) h (m)
1 20 3 18,5 2,9 19,9 2,9
2 2,5 10 2,8 11,0 2,5 10,0
3 50 - 54,7 - 50,0 -

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

Modelo teórico Modelo inicial Modelo estimado


n ρ (Ωm) h (m) ρ (Ωm) h (m) ρ (Ωm) h (m)
1 20 3 31,2 3,9 20,0 2,9
2 2,5 10 3,5 15,3 2,5 10,0
3 50 - 39,7 - 50,0 -

Tabela 3.4: Modelo inicial com fator de aleatoriedade 2.

Modelo teórico Modelo inicial Modelo estimado


n ρ (Ωm) h (m) ρ (Ωm) h (m) ρ (Ωm) h (m)
1 20 3 19,6 2,7 20,0 3,0
2 2,5 10 2,2 10 2,4 9,9
3 50 - 49,1 - 50,0 -

Tabela 3.5: Modelo inicial com poucas medidas de dados de campo.

3.1.2 Modelo inicial com alto nível de erro


O programa gerador_aleatorio.f08 fornece ao usuário a possibilidade de aumentar o des-
vio atribuído ao modelo inicial. Dessa forma, é possível verificar o comportamento da inversão
para modelos iniciais escolhidos com mais precisão ou com alto nível de erro. Para isso é esco-
lhido um “fator de aleatoriedade”, cujo valor varia de −2 a 2, sendo que, quanto mais distante
de zero, mais desvio será imposto ao modelo inicial gerado. A Figura 3.4 mostra o resultado
de uma simulação feita para o arranjo Wenner com fator de aleatoriedade 2. Observa-se que
mesmo com o alto nível de disparidade do modelo inicial, foi possível recuperar com precisão
modelo teórico original, o que demonstra a eficácia do algoritmo para inversão de dados
sintéticos. Os dados dos modelos podem ser encontrados na Tabelas 3.4.

3.1.3 Modelo com poucas observações


O programa também foi testado para o caso hipotético de não haver muitas medidas durante
a aquisição. Para isso, utilizou-se o mesmo modelo teórico da seção anterior, porém a mode-
lagem foi feita usado o arranjo Wenner com um fator de afastamento de 1,4. Dessa forma, os
dados observados sintéticos continham 21 medidas, significativamente menos do que os dois
casos anteriores, os quais continham 73. A Tabela 3.5 mostra os modelos para esse caso e o
resultado pode ser visto na Figura 3.5, onde se verifica que o modelo teórico foi recuperado
com exatidão, mostrando que o programa funciona bem para esse tipo de situação.
32

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

Dados de campo Dados de campo


a (m) ρa (Ωm) a (m) ρa (Ωm)
40 28,5 220 12,9
60 27,1 240 11,3
80 25,3 260 9,9
100 23,5 280 8,7
120 21,7 300 7,8
140 19,8 320 7,1
160 18,0 340 6,7
180 16,3 360 6,5
200 14,5 380 6,4

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.

3.2 Dados Reais


Para o processamento de dados reais o programa desenvolvido segue o fluxograma apresen-
tado na Figura 2.4. Nessa seção será mostrado os resultados obtidos após a inversão.

3.2.1 Arranjo Wenner


Para esse arranjo foram utilizados dados de campo de Malagash, Nova Escócia. Esses dados
foram obtidos de Telford et al. (1990) e podem ser encontrados na Tabela 3.6. Para a inversão
desses dados foi utilizado o modelo inicial mostrado na Tabela 3.7. O resultado pode ser visto
na Figura 3.6, onde verifica-se que o programa foi capaz de recuperar os dados observados
com alto nível de exatidão.
35

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

Dados de campo, 1998 Dados de campo, 1999


a (m) b (m) ρa (Ωm) a (m) b (m) ρa (Ωm)
1.5 0.5 59.5 1.0 0.5 26.1
2.0 0.5 54.7 1.5 0.5 29.1
3.0 0.5 48.4 2.0 0.5 30.1
4.0 0.5 42.9 3.0 0.5 34.2
5.0 0.5 38.8 4.0 0.5 37.4
6.0 0.5 36.3 5.0 0.5 35.5
8.0 0.5 31.3 6.0 0.5 34.4
10.0 0.5 27.5 8.0 0.5 31.0
15.0 0.5 24.3 10.0 0.5 28.1
15.0 2.5 25.6 15.0 0.5 25.2
20.0 0.5 21.5 15.0 2.5 24.4
20.0 2.5 22.9 20.0 0.5 22.6
30.0 2.5 20.1 20.0 2.5 22.3
40.0 2.5 21.8 30.0 2.5 20.4
40.0 10.0 21.0 40.0 2.5 20.7
50.0 10.0 23.5 40.0 10.0 22.0
60.0 10.0 26.6 50.0 2.5 22.8
80.0 10.0 37.1 50.0 10.0 23.7
100.0 10.0 47.5 60.0 10.0 27.5
80.0 10.0 39.3
100.0 10.0 49.2

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.

3.2.2 Arranjo Schlumberger


Para esse arranjo foram feitos testes utilizando dois dados de campo do mesmo local, porém
em épocas diferentes. Os dados, mostrados na Tabela 3.8, foram fornecidos por Sato (2018)
e coletados no Instituto de Letras da UFBA em março de 1998 e maio de 1999. A fim de
fazer uma comparação entre os dois métodos, a inversão foi feita considerando o arranjo
Schlumberger prático e teórico, com o uso das equações 1.17 e 1.18, respectivamente.
A Tabela 3.9 mostra os modelos que foram estimados pelo programa ao trabalhar com
os dados coletados em 1998, mostrados na tabela anterior. Foi considerado um modelo de
37

Schlumberger teórico Schlumberger prático


n ρ (Ωm) h (m) ρ (Ωm) h (m)
1 65,3 1,0 63,0 1,2
2 37,9 4,2 34,2 5,4
3 17,2 31,2 13,8 22,2
4 148,1 - 185,6 -

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

Schlumberger teórico Schlumberger prático


n ρ (Ωm) h (m) ρ (Ωm) h (m)
1 23,6 1,0 26,2 1,3
2 76,8 1,0 155,9 0,4
3 23,4 9,6 23,7 11,7
4 14,0 26,8 4,5 6,1
5 11105,6 - 345,5 -

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

Schlumberger teórico Schlumberger prático


n ρ (Ωm) h (m) ρ (Ωm) h (m)
1 25,3 0,9 24,9 0,9
2 43,5 3,4 42,4 4,1
3 17,3 32,8 14,7 24,4
4 335,5 - 164,6 -

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

o convite de participar da banca e pelas sugestões que enriqueceram esse trabalho.


Por último, mas não menos importante, ao Professor Hédison Sato, que mais do que
um professor ou orientador, foi um companheiro durante essa jornada. Obrigada pela sua
paciência, conversas, ensinamentos e por ter aceitado me orientar.
Todos vocês sabem o que ter concluído esse trabalho significa para mim e agradeço-os
profundamente por terem me ajudado nessa conquista. Obrigada.
Referências

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

Telford, W. M.; Geldart, L. P. e Sheriff, R. E. (1990) Applied geophysics, Cambridge Un.


Press, Cambridge, 2o edic..
Williams, T. e Kelley, C. (2017) Gnuplot version 5.0 patchlevel 7, http://www.gnuplot.
info.
Zhdanov, M. S. (2009) Geophysical eletromagnetic theory and methods, Elsevier, Amster-
dam, 1o edic..
Apêndice A

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.

1 submodule (matriz) sub_inv_spr


2 ! desenvolvido por Marina Borja, UFBA (dez/2018)
3 !---------------------------------------------------------------------------
4 contains
5 ! _ _
6 ! ___ ___ _ __ | |_ __ _(_)_ __ ___
7 ! / __/ _ \| ’_ \| __/ _‘ | | ’_ \/ __|
8 ! | (_| (_) | | | | || (_| | | | | \__ \
9 ! \___\___/|_| |_|\__\__,_|_|_| |_|___/
10 !
11 !

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

135 ! \partial rho_a/\partial w_npar


136 ! var = variação no parâmetro npar para a derivada de diferenças finitas
137 ! (rhoa_1-rhoa_0)/(var*w_npar)
138 ! ra = valor da separação AB/2 do arranjo Schlumberger
139 ! rb = valor da separação MN/2 do arranjo Schlumberger
140 !
141
142 integer, intent(in) :: npar, it_w
143 real, intent(in) :: var, ra, rb
144 real :: val0, rhoa0, rhoa1
145
146 rhoa0=resisap_schlumpr(ra, rb)
147
148 if(npar.ge.1.and.npar.le.nlayer) then
149 ! salva a resistividade da camada npar
150 val0=resistividade(npar)
151 ! modifica a resistividade da camada npar pela fração var
152 ! recalcula o contraste e calcula o novo valor da resistividade aparente
153 resistividade(npar)=val0*(1+var)
154 contraste=resistividade(2:nlayer)/resistividade(1:nlayer-1)
155 rhoa1=resisap_schlumpr(ra, rb)
156 ! restaura a resistividade da camada npar, recalcula os contrastes
157 resistividade(npar)=val0
158 contraste=resistividade(2:nlayer)/resistividade(1:nlayer-1)
159 elseif(npar.le.2*nlayer-1) then
160 ! salva a espessura da camada npar
161 val0=espessura(npar-nlayer)
162 ! modifica a espessura da camada npar pela fração var
163 ! calcula o novo valor da resistividade aparente
164 espessura(npar-nlayer)=val0*(1+var)
165 rhoa1=resisap_schlumpr(ra, rb)
166 ! restaura o valor da espessura
167 espessura(npar-nlayer)=val0
168 else
169 stop "Erro no cálculo da derivada."
170 endif
171
172 f_derivada_spr=(rhoa1-rhoa0)/(val0*var)
173
174 end function f_derivada_spr
175
176 !----------------------------------------------------------------------------
177
178 end submodule sub_inv_spr

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

6 ! Schlumberger Prático. Tem como arquivo de entrada o modelo inicial e como


7 ! arquivo de saída dados de campo modelados.
8 !
9 ! Desenvolvido por Marina Borja, UFBA (dez/2018).
10 !============================================================================
11
12 use kernel
13 use configuracao
14
15 implicit none
16 !----------------------------------------------------------------------------
17 ! DEFINIÇÃO DE VARIÁVEIS
18 !
19 ! n = número de camadas
20 ! ra = afastamento entre os eletrodos AB/2
21 ! rb = afastamento MN/2
22 ! rho_campo = resistividade aparente
23 ! mod_resis = resistividade
24 ! mod_esp = espessura
25 !----------------------------------------------------------------------------
26
27 real, allocatable, target, dimension(:) :: mod_resis, mod_esp
28 real :: ra, rb, rho_campo, na, nb
29 integer :: n, i, n_obs
30 real, allocatable :: a(:), b(:)
31
32 if(.not.configuracoes()) then
33 stop "Erro nas configurações do afastamento e/ou fator espaçamento."
34 endif
35
36 read(5,*)n
37
38 allocate(mod_resis(n), mod_esp(n-1))
39
40 read(5,*)(mod_resis(i), mod_esp(i), i=1, n-1)
41 read(5,*)mod_resis(n)
42
43 nlayer=n
44
45 ! Resistividade e espessura são pointers e assumentos os valores de seus
46 ! respectivos targets:
47 resistividade=>mod_resis
48 espessura=>mod_esp
49
50 contraste=resistividade(2:nlayer)/resistividade(1:nlayer-1)
51
52 open(10, file=’mode.dat’, form=’formatted’, status=’old’)
53
54 n_obs=0
55
56 do
57 read(10,*,end=1000)na,nb
58 n_obs=n_obs+1
59 enddo
60
61 1000 rewind(10)
62
63 if(n_obs.eq.1) then
64 ! Fazendo o cálculo da resistividade aparente para dado sintético:
65 ra=afastamento
66 do while(ra.le.100)
67 rb=0.01*ra
51

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

A.3 Resistividade aparente


Este módulo faz o cálculo das resistividades aparentes para todos os arranjos abordados
nesse trabalho e procura reproduzir as equações 1.16, 1.17 e 1.18.
Nas funções resisap_wenner e resisap_schlumpr as variáveis temp1 e temp2 são os
resultados das soluções das equações de Bessel contidas nas expressões das resistividades
aparentes mencionadas acima. Para solucioná-las foi usado a função rhank0, que calcula
R∞
0
f (g)J0 (gb)dg e foi desenvolvida por Anderson (1975), sendo reescrita para Fortran 2008
por Sato (2018). Similarmente, o mesmo foi feito para a função resisap_schlum, mas dessa
vez usando a função rhank1.
O integrando das expressões da resistividade aparente já mencionadas é calculado pelas
funções integrando_w e integrando_s (para o arranjo Schlumberger teórico), que fazem
uso da função recursiva funcao_f. Essa função retorna o resultado da equação 1.10 e para
isso ela chama a si mesma recursivamente.

1 module kernel
2 ! desenvolvido por Marina Borja, UFBA (dez/2018)
3 !===========================================================================
4 !
52

5 ! Este módulo faz o cálculo das resistividades aparentes para os arranjos


6 ! Wenner, Schlumberger teórico e Schlumberger prático.
7 !
8 !===========================================================================
9
10 implicit none
11
12 private4
13 public resisap_wenner, resisap_schlum, resisap_schlumpr
14 public nlayer, resistividade, espessura, contraste, vetor_w
15 save
16
17 !---------------------------------------------------------------------------
18 ! VARIÁVEIS GLOBAIS
19 !---------------------------------------------------------------------------
20
21 integer :: i, nlayer
22 real, pointer, dimension(:) :: resistividade, espessura
23 real, allocatable, target, dimension(:) :: contraste, vetor_w
24
25 !---------------------------------------------------------------------------
26 contains
27 ! _ _
28 ! ___ ___ _ __ | |_ __ _(_)_ __ ___
29 ! / __/ _ \| ’_ \| __/ _‘ | | ’_ \/ __|
30 ! | (_| (_) | | | | || (_| | | | | \__ \
31 ! \___\___/|_| |_|\__\__,_|_|_| |_|___/
32 !
33 !
34 !---------------------------------------------------------------------------
35
36 real function resisap_wenner(a)
37
38 !
39 ! Essa função calcula a resistividade aparente para o arranjo Wenner.
40 ! Utiliza a função rhank0.
41 !
42 ! a = espaçamento entre os eletrodos
43 !
44
45 real, intent(in) :: a
46 real :: temp1, temp2, rhank0
47 integer :: ll1, ll2
48
49 temp1=rhank0(alog(a), integrando_w, 1e-8, ll1)/a
50 temp2=rhank0(alog(2*a), integrando_w, 1e-8, ll2)/(2*a)
51
52 resisap_wenner=resistividade(1)*(1+2*a*(temp1-temp2))
53
54 end function resisap_wenner
55
56 !---------------------------------------------------------------------------
57
58 real function resisap_schlum(a,b)
59
60 !
61 ! Essa função calcula a resistividade aparente para o arranjo Schlumberger
62 ! teórico.
63 ! Utiliza a função rhank1.
64 !
65 ! a = AB/2
66 ! b = MN/2
53

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

128 real function integrando_w(lambda)


129
130 !
131 ! Argumento da integral da expressão da resistividade aparente para
132 ! o arranjo Wenner e Schlumberger prático deselvolvida por H. K. Sato, 2018.
133 !
134
135 real, intent(in):: lambda
136 integrando_w=funcao_f(0,lambda)-1
137 end function integrando_w
138
139 !---------------------------------------------------------------------------
140
141 real function integrando_s(lambda)
142
143 !
144 ! Argumento da integral da expressão da resistividade aparente para
145 ! o arranjo Schlumberger teórico multiplicado por lambda.
146 !
147 ! Adaptada de H. K. Sato, 2008.
148
149 real, intent(in):: lambda
150 integrando_s=lambda*(funcao_f(0,lambda)-1)
151 end function integrando_s
152
153 !---------------------------------------------------------------------------
154
155 end module kernel