universidade de são paulo instituto de astronomia ... · 3.9 tela para criação e visualização...

106
Universidade de São Paulo Instituto de Astronomia, Geofísica e Ciências Atmosféricas Departamento de Geofísica Desenvolvimento de um algoritmo computacional para o cálculo do tensor gradiente gravimétrico a partir de um conjunto de prismas retangulares MARTHA CAVALCANTE BERTI SANJUAN SÃO PAULO-SP 2008

Upload: vuongthuy

Post on 18-Jan-2019

212 views

Category:

Documents


0 download

TRANSCRIPT

Universidade de São PauloInstituto de Astronomia, Geofísica e Ciências Atmosféricas

Departamento de Geofísica

Desenvolvimento de um algoritmo computacional para o cálculo do tensor gradiente gravimétrico a partir de um conjunto de prismas retangulares

MARTHA CAVALCANTE BERTI SANJUAN

SÃO PAULO-SP2008

Martha Cavalcante Berti Sanjuan

Desenvolvimento de um algoritmo computacional para o cálculo do tensor gradiente gravimétrico a partir de um conjunto de prismas retangulares

Orientador: Dr. Eder Cassola Molina

Dissertação apresentada ao Instituto de Astronomia, Geofísica e Ciências Atmosféricas da Universidade de São Paulo para a obtenção do título de Mestre em Ciências na área de Geofísica.

São Paulo

2008

Dedico este trabalho aos meus queridos pais,

Pepe e Eugênia, e ao meu amado esposo Igor.

Agradecimentos

Em primeiro lugar, a Deus, por me permitir alcançar esta vitória.

Ao Prof. Dr. Eder Cassola Molina pela amizade e orientação.

A Prof. Naomi Ussami pelo acompanhamento e colaboração.

A Teca, Virgínia e Magda, secretárias do departamento de geofísica, e a Rose,

secretária da pós-graduação do Instituto, pela atenção.

Aos meus pais, Pepe e Eugênia, aos meus avós, Yvonne e Pepito, Myriam e Antônio, e

aos meus irmãos, Warde e Marcelo, por todo amor e carinho.

Ao meu esposo, Igor, pelo amor e pelo apoio, colaboração e enorme paciência.

À Coordenação de Aperfeiçoamento de Pessoal de Nível Superior (CAPES), pelo apoio

financeiro.

Resumo

SANJUAN, M. C. B. Desenvolvimento de um algoritmo computacional para o

cálculo do tensor gradiente gravimétrico a partir de um conjunto de prismas

retangulares. Dissertação de mestrado, Instituto de Astronomia, Geofísica e Ciências

Atmosféricas da Universidade de São Paulo. 106 p, 2008.

Um programa foi desenvolvido e implementado com o objetivo de calcular o tensor

gradiente gravimétrico e a anomalia gravimétrica resultantes de um conjunto de prismas

retangulares. Com este programa é possível modelar feições geológicas utilizando

prismas de diferentes dimensões e densidades e, então, determinar os valores dos

gradientes gravimétricos e da anomalia gravimétrica resultantes. A aplicação

desenvolvida possui uma interface gráfica, tornando sua utilização simples e eficiente.

O algoritmo foi validado através da reprodução de exemplos encontrados na

literatura. Os valores dos gradientes gravimétricos e da anomalia gravimétrica

calculados a partir do programa para um cubo, cujas respostas são relatadas na

literatura, para um modelo sintético, e para uma feição geológica real, foram

apresentados com o objetivo de avaliar as respostas obtidas. A análise desses

resultados mostrou que o programa desenvolvido é uma ferramenta útil para a

identificação das características das fontes, como as bordas, os cantos, os limites e o

seu centro de massa.

Palavras-chave: tensor gradiente gravimétrico; gradiometria; prismas retangulares;

algoritmo.

Abstract

A program was implemented in order to calculate the gravity gradient tensor and

gravity anomaly resulting from a set of rectangular prisms. With this program one can

model geologic features using prisms of different sizes and densities, and then

determine the values of the gravity gradients and the resulting gravity anomaly. The

application was developed with a graphical interface, making its use simple and efficient.

The algorithm was validated by the reproduction of examples presented in the

literature. The values of gravity gradients and gravity anomaly calculated by the program

for a cube, whose responses are reported in the literature, for a synthetic model and for

a real geological feature, were presented with the aim of evaluating the values so

obtained. The analysis of these results proved that the program is a useful tool for the

identification of the sources parameters, such as the edges, the corners, the limits and

their center of mass.

Keywords: gravity gradient tensor; gradiometry; rectangular prisms; algorithm.

Sumário

Agradecimentos

Resumo

Abstract

Lista de Figuras

Lista de Tabelas

1. Introdução 14

2.Revisão Teórica 17

2.1. Campo e Potencial Gravitacional............................................ 17

2.2. Tensor Gradiente Gravimétrico............................................... 19

2.3. Anomalia Gravimétrica e Tensor Gradiente Gravimétrico

resultantes de um conjunto de prismas retangulares.............. 21

3.Programa para o cálculo do tensor gradiente gravimétrico e

da anomalia gravimétrica 29

3.1. Algoritmo Básico...................................................................... 29

3.1.1. Entrada de dados................................................................... 30

3.1.2. Processamento....................................................................... 31

3.1.3. Saída de dados...................................................................... 35

3.2. A Interface Gráfica................................................................... 36

4.Validação do Algoritmo 43

5.Resultados e Discussão 59

5.1. Cálculo das respostas para corpos de forma simples............. 59

5.2. Cálculo a partir de dados sintéticos........................................ 68

5.3. Cálculo a partir de dados reais................................................ 75

6.Conclusão 80

Referências Bibliográficas 82

Apêndice A – Código Fonte do Algoritmo Básico 85

Lista de Figuras

2.1 Campo gravitacional gerado pela partícula m no ponto P...................... 17

2.2 Componentes do campo gravitacional.................................................... 19

2.3 Tensor gradiente gravimétrico................................................................ 20

2.4 Representação gráfica das componentes do tensor gradiente

gravimétrico resultante de um corpo em forma cúbica – dados sintéticos

(adaptada de Braga, 2006). Escala de cores arbitrária. ............................ 22

2.5 Vértices do prisma.................................................................................. 23

3.1 Fluxograma da entrada dos dados para a criação do modelo................ 30

3.2 Fluxograma da entrada dos dados da grade de cálculo......................... 31

3.3 As faces 1 e 2 do prisma contribuem para a componente Gz, enquanto

as faces 3 e 4 contribuem para a componente Gy........................................ 32

3.4 Fluxograma que descreve a etapa de processamento do algoritmo,

onde são selecionados os prismas, os pontos de observação e realizados

os cálculos das componentes....................................................................... 33

3.5 Fluxograma que detalha os cálculos das componentes do tensor

gradiente gravimétrico e da anomalia gravimétrica...................................... 34

3.6 Fluxograma que descreve a etapa de saída de dados........................... 35

3.7 Tela inicial, apresentando o menu com as opções para o usuário......... 37

3.8 Tela onde o usuário deve determinar a dimensão dos eixos

coordenados................................................................................................. 37

3.9 Tela para criação e visualização da feição geológica, através de um

conjunto de prismas...................................................................................... 38

3.10 Visualização do modelo com somente um prisma adicionado............. 39

3.11 Representação de uma feição geológica. Esta imagem foi

rotacionada e afastada, utilizando as ferramentas do programa, para

melhor visualização do modelo criado.......................................................... 40

3.12 Tela com opções para a realização dos cálculos................................. 41

3.13 Tela onde são disponibilizadas as opções de plotagem dos gráficos

das componentes do tensor gradiente gravimétrico e anomalia

gravimétrica................................................................................................... 42

4.1 Visualização, gerada pela aplicação desenvolvida, do modelo

correspondente ao exemplo apresentado por Montana et al. (1992)........... 44

4.2 Componente Gxx do tensor gradiente gravimétrico................................. 46

4.3 Componente Gyx do tensor gradiente gravimétrico................................. 48

4.4 Componente Gyy do tensor gradiente gravimétrico................................. 50

4.5 Componente Gzx do tensor gradiente gravimétrico................................. 52

4.6 Componente Gzy do tensor gradiente gravimétrico................................. 54

4.7 Componente Gzz do tensor gradiente gravimétrico................................. 56

4.8 Representação gráfica da anomalia gravimétrica resultante do modelo 58

5.1 Visualização do modelo de um corpo simples, utilizado no teste........... 60

5.2 Componente Gxx resultante de um cubo simples.................................... 61

5.3 Componente Gyy resultante do cubo....................................................... 62

5.4 Componente Gyx resultante do cubo....................................................... 63

5.5 Componente Gzx resultante do cubo....................................................... 64

5.6 Componente Gzy resultante do cubo....................................................... 65

5.7 Componente Gzz resultante do cubo....................................................... 66

5.8 Anomalia Gravimétrica gerada pelo cubo............................................... 67

5.9 Feição geológica sintética modelada para o cálculo das componentes

do tensor e da anomalia gravimétrica........................................................... 70

5.10 Gráfico da componente Gxx resultante da feição modelada.................. 71

5.11 Gráfico da componente Gyy resultante da feição modelada.................. 71

5.12 Gráfico da componente Gyx resultante da feição modelada.................. 72

5.13 Gráfico da componente Gzx resultante da feição modelada.................. 72

5.14 Gráfico da componente Gzy resultante da feição modelada.................. 73

5.15 Gráfico da componente Gzz resultante da feição modelada.................. 73

5.16 Gráfico da anomalia gravimétrica gerada pela feição modelada.......... 74

5.17 Modelo do Maciço Alcalino de Poços de Caldas, criado através da

aplicação utilizando um conjunto de prismas retangulares – visão superior 76

5.18 Modelo do Maciço observado a partir de outras perspectivas.............. 76

5.19 Componentes Gxx, Gyy e Gyx resultantes do modelo do Maciço............ 77

5.20 Componentes Gzx, Gzy e Gzz resultantes do modelo do Maciço............ 78

5.21 Anomalia gravimétrica gerada pelo modelo do Maciço........................ 79

Lista de Tabelas

4.1 Parâmetros de entrada utilizados nos testes de validação: dimensões,

valores de densidade e coordenadas dos prismas do modelo. Esses

valores correspondem ao modelo apresentado como exemplo por

Montana et al. (1992).................................................................................... 43

4.2 Parâmetros dos pontos de observação.................................................. 44

4.3 Resultados obtidos para a componente Gxx. Os valores das

coordenadas x e y são dados em km e os valores de Gxx são medidos em

Eötvos (mGal/km)......................................................................................... 45

4.4 Resultados obtidos para a componente Gyx. Os valores das

coordenadas x e y são dados em km e os valores de Gyx são medidos em

Eötvos (mGal/km)......................................................................................... 47

4.5 Resultados obtidos para a componente Gyy. Os valores das

coordenadas x e y são dados em km e os valores de Gyy são medidos em

Eötvos (mGal/km) ........................................................................................ 49

4.6 Resultados obtidos para a componente Gzx. Os valores das

coordenadas x e y são dados em km e os valores de Gzx são medidos em

Eötvos (mGal/km) ........................................................................................ 51

4.7 Resultados obtidos para a componente Gzy. Os valores das

coordenadas x e y são dados em km e os valores de Gzy são medidos em

Eötvos (mGal/km) ........................................................................................ 53

4.8 Resultados obtidos para a componente Gzz. Os valores das

coordenadas x e y são dados em km e os valores de Gzz são medidos em

Eötvos (mGal/km) ........................................................................................ 55

4.9 Resultados obtidos para a componente Gz. Os valores das

coordenadas x e y são dados em km e os valores de Gz são medidos em

mGal.............................................................................................................. 57

5.1 Parâmetros de entrada para a criação da grade de cálculo................... 60

5.2 Parâmetros de entrada: dimensões, valores de densidade e

coordenadas dos prismas que compõem o modelo..................................... 69

5.3 Parâmetros de entrada para a criação da grade de cálculo................... 69

5.4 Divisão do Maciço, considerando os valores de densidade (Slavec et

al., 2004) ..................................................................................................... 75

14

1. Introdução

O valor da aceleração da gravidade é afetado localmente devido à distribuição

de materiais na subsuperfície terrestre. Desta forma, medidas de aceleração da

gravidade fornecem valiosas informações para o estudo da estrutura e da

composição da Terra, bem como para pesquisa e localização de recursos naturais.

A componente da aceleração da gravidade medida com maior freqüência é a

componente vertical, devido à facilidade de sua obtenção e da interpretação dos

dados. Entretanto, medidas das outras componentes fornecem informações

adicionais. Diversos autores (Evjen, 1936; Hammer e Anzoleaga, 1975; Stanley e

Green, 1976; Fajklewicz, 1976; Ager e Liard, 1982; Bell et al., 1997; Pratson et al.,

1998) observaram e relataram a importância e utilidade dos gradientes

gravimétricos, alguns deles demonstrando que esses gradientes permitem

determinar o campo da gravidade com maior resolução e mostrar as bordas, a forma

e o centro de massas da fonte.

O primeiro instrumento a medir com sucesso todas as componentes do tensor

gradiente gravimétrico foi a balança de torção, utilizada pelo físico húngaro Barão

Roland von Eötvös, capaz de medir pequenas variações na gravidade causadas

pela presença de um corpo próximo ao local da medida: o gradiente gravimétrico.

Uma série de experimentos de campo mostrou que a balança de torção podia

ser usada para medir os gradientes gravimétricos resultantes de estruturas

geológicas e este instrumento chegou a ser utilizado com sucesso na busca por

petróleo. Entretanto, ele apresentava diversos problemas, como dificuldade de

utilização, grande sensibilidade a interferências de objetos próximos, além dos

resultados obtidos serem, em geral, de difícil interpretação (Bell, 1998).

Os gradiômetros, desenvolvidos a princípio para serem utilizados como

instrumento de navegação de submarinos, também são instrumentos capazes de

medir pequenas variações na força de gravidade causadas por feições geológicas.

Testes mostraram que os gradientes gravimétricos medidos por estes equipamentos

eram capazes de revelar com grande precisão a localização e a forma de corpos em

subsuperfície.

15

Atualmente, equipamentos similares estão sendo utilizados por pesquisadores

civis e comercialmente em sistemas de aerogradiometria, que realizam

levantamentos aéreos para determinar a localização de depósitos de minério e

hidrocarbonetos (Braga, 2006; Mickus e Hinojosa, 2001). Esta tecnologia também

vem sendo utilizada em satélites, como é o caso do GOCE (Gravity field and steady-

state Ocean Circulation Explorer), missão da Agência Espacial Européia dedicada a

medir o campo gravitacional da Terra e modelar o geóide com precisão e resolução

sem precedentes.

Além da capacidade de mapear feições geológicas com precisão, a aplicação

dos gradiômetros também eliminou o problema da grande quantidade de ruído

presente em dados de levantamentos gravimétricos realizados a partir de bases

móveis. Gravímetros medem valores de aceleração e, dessa maneira, não são

capazes de diferenciar a aceleração do veículo da aceleração causada pela força

gravitacional. Uma vez que gradiômetros não medem a aceleração da gravidade,

mas os gradientes dessa aceleração (Hopkins, 1975), a aceleração do veículo não

irá influenciar os resultados obtidos.

Em vista do crescente interesse observado nas informações fornecidas pelo

tensor gradiente gravimétrico, o desenvolvimento de um algoritmo capaz de predizer

a resposta do tensor gradiente gravimétrico resultante de corpos em subsuperfície

constitui-se numa ferramenta útil para auxiliar na validação e na interpretação dos

dados adquiridos pelos instrumentos.

Dessa forma, no presente estudo foi desenvolvido e implementado um

algoritmo computacional para o cálculo do tensor gradiente gravimétrico e da

anomalia gravimétrica resultante de um conjunto arbitrário de prismas retangulares.

Com este programa será possível modelar os dados do tensor gradiente

gravimétrico para diversas situações geológicas, uma vez que qualquer feição

geológica pode ser representada por um conjunto de prismas, e comparar os

resultados com dados adquiridos pelos sistemas comerciais, que já estão

começando a ser coletados.

A dissertação está organizada em 4 capítulos, mais introdução e conclusão. O

capítulo 2 apresenta os conceitos necessários para o desenvolvimento do trabalho e

o equacionamento do problema. O programa desenvolvido é descrito em detalhes

16

no capítulo 3, enquanto no capítulo 4 são apresentados os testes realizados com o

objetivo de validar as rotinas implementadas. O capítulo 5 apresenta e discute os

resultados obtidos nos testes realizados, e o capítulo 6 traz as conclusões do

presente trabalho.

17

2. Revisão Teórica

2.1. Campo e Potencial Gravitacional

A intensidade da força de atração gravitacional entre duas partículas é dada

pela equação (2.1):

2

21

r

mmGF

(2.1)

onde G é a constante gravitacional universal (G = 6,6732x10-8 cm3s-2g-1), m1 e m2 são

as massas das partículas e r é a distância que as separa.

É possível ainda descrever a interação gravitacional entre partículas a partir do

conceito de campo, admitindo-se que cada partícula gera um campo no espaço,

chamado campo gravitacional. O campo gravitacional gerado por uma partícula de

massa m (atrativa), representada na figura 1, que atua sobre a partícula de massa

unitária (atraída), é expresso pela equação (2.2):

rF3r

Gm (2.2)

onde kjir ''' zzyyxx e rr .

Figura 2.1: Campo gravitacional gerado pela partícula m no ponto P.

X

Y

Z

i

kj

y’

x’z'

m(x’,y’, z’)

P(x,y,z)

r

F

z

y

x

18

O campo gravitacional da Terra pode ser expresso pelo potencial gravitacional,

de acordo com a equação (2.3):

VgradF (2.3)

onde

r

GmV (2.4)

que é denominada função potencial ou potencial de atração gravitacional.

Para uma distribuição contínua de massas, o potencial é definido pela equação

(2.5):

m r

dmGV (2.5)

Sendo vm , se a densidade do corpo for constante temos que:

v r

dvGV (2.6)

O gradiente do potencial V é dado pela soma de suas derivadas parciais em

relação a x, y e z, de acordo com a equação (2.7):

kjiz

V

y

V

x

VVgrad

(2.7)

onde i, j e k representam os versores associados aos eixos coordenados.

Quando o campo gravitacional é calculado na região externa à fonte, o

potencial é uma solução da equação de Laplace:

02

2

2

2

2

22

z

V

y

V

x

VV (2.8)

19

2.2. Tensor Gradiente Gravimétrico

De acordo com a equação (2.7), o campo gravitacional pode ser decomposto

em três componentes:

x

VGx

(2.9a)

y

VGy

(2.9b)

z

VGz

(2.9c)

Essas componentes representam as variações do campo nas direções x, y e z,

como representado na figura 2.2.

Figura 2.2: Componentes do campo gravitacional.

Cada uma das três componentes, por sua vez, também pode apresentar

variações em relação aos três eixos. O tensor gradiente gravimétrico representa as

variações das componentes do campo gravitacional em cada direção, como mostra

a figura 2.3.

Gx

Gy

Gz

20

Figura 2.3: Tensor gradiente gravimétrico.

As variações das componentes do campo gravitacional são dadas pelas

derivadas parciais de cada componente em relação às direções x, y e z.

z

G G

y

GG

x

GG

z

GG

y

GG

x

GG

z

G G

y

GG

x

GG

zzz

zyz

zxz

yzy

yyy

yxy

xxz

xxy

xxx

ijG (2.10)

As componentes que formam a diagonal principal do tensor correspondem a:

2

2

x

VGxx

(2.11a)

2

2

y

VGyy

(2.11b)

2

2

z

VGzz

(2.11c)

zzzyzx

yzyyyx

xzxyxx

ij

GGG

GGG

GGG

G

Gxx

Gxy

Gxz

Gyx

Gyy

Gyz

Gzx

Gzy

Gzz

Gy

Gx

Gz

21

Dessa forma, a soma dessas componentes corresponde ao Laplaciano do

potencial, que é nulo no exterior das massas atrativas:

02 VGGG zzyyxx (2.12)

2.3. Anomalia Gravimétrica e Tensor Gradiente Gravimétrico resultantes

de um conjunto de prismas retangulares

Expressões para o cálculo do campo gravitacional gerado por um prisma

retangular já foram desenvolvidas por diversos autores (Nagy, 1966; Shuey e

Pasquale, 1973; Cady, 1980). Nagy (op. cit.), por exemplo, apresentou uma

expressão para a atração gravitacional de um prisma retangular válida para qualquer

ponto em suas bordas ou externo a ele.

Pelo fato do campo gravitacional ser um campo potencial, a anomalia

gravimétrica resultante de um conjunto de prismas pode ser obtida pela soma das

anomalias geradas por cada prisma do sistema. Dessa forma, uma vez que é

possível representar qualquer configuração tridimensional através de prismas

retangulares de dimensões e densidades variadas, é possível, então, calcular a

componente vertical da atração gravitacional de uma distribuição de massa em

pontos arbitrariamente selecionados. Um raciocínio análogo pode ser utilizado para

calcular todas as componentes do tensor gradiente gravimétrico.

A figura 2.4 mostra a representação gráfica das componentes do tensor

gradiente gravimétrico resultante de um corpo cúbico. As componentes gxx e gyy

identificam as bordas norte-sul e leste-oeste, respectivamente. A componente gxy

mostra dois altos e dois baixos gravimétricos, associados aos cantos do corpo. As

componentes gxz e gyz estão relacionadas ao centro de massa do corpo, enquanto a

componente gzz é a representação da componente vertical da aceleração.

22

Figura 2.4: Representação gráfica das componentes do tensor gradiente gravimétrico resultante de um corpo em forma cúbica – dados sintéticos. (adaptada de Braga, 2006). Escala de cores arbitrária.

De acordo com Shuey e Pasquale (1973), a equação para a anomalia

gravimétrica resultante de um prisma retangular, em um ponto de observação, pode

ser escrita como um somatório de integrais de superfície sobre os lados do prisma.

Para um prisma com seus lados paralelos aos eixos coordenados, o campo

gravitacional é dado pela equação (2.13):

ii S

ie dSneG

00 rr

rg1

ˆˆ (2.13)

onde

0e rg componente do campo gravitacional da Terra em uma direção

arbitrária,

G constante gravitacional universal,

densidade,

e vetor unitário em uma direção arbitrária.

n vetor unitário externo normal à superfície S,

r distância da origem a um ponto dentro do prisma,

23

0r distância da origem a um ponto de observação P,

iS a superfície limitando o i-ésimo lado do prisma,

A equação (2.13) foi solucionada por vários autores, como Nagy (1966) e Cady

(1980), fazendo a integração na superfície x-y. O campo gravitacional na origem é

expresso, então, pela equação (2.14):

4

1

3

1

0i j

jie iTGg ne (2.14)

onde

iiii kTkTkTkTiT 11141511 (2.15)

iiii kTkTkTkTiT 24212522 (2.16)

iiii kTkTkTkTiT 31343533 (2.17)

k representa os vértices do prisma, variando de 1 a 8 (ver figura 2.5).

Figura 2.5: Vértices do prisma.

Os termos T1, T2 e T3 são dados pelas equações (2.18) a (2.20):

RxvkT ln1 (2.18)

1 4

5 8

2 3

6 7

24

RvxkT ln2 (2.19)

vw

wxRxwkT

221

3 tan (2.20)

onde

zyv kk sincos (2.21)

zyw kk cossin (2.22)

kk

kkk yy

zz

1

11tan (2.23)

222 zyxR (2.24)

onde θk representa os ângulos formados entre os lados do prisma e a superfície x-y.

Uma vez que no presente estudo estão sendo considerados prismas

retangulares, esses ângulos poderão ser 0° ou 90°. A finalidade deste ângulo é

determinar os valores de v e w, de forma que assumam os valores de y e z, de

acordo com o lado do prisma sobre o qual está sendo realizado o cálculo. Quando θk

= 0°, v assume o valor de y, enquanto w assume o valore de z. O inverso ocorre

para θk = 90°.

As componentes do campo gravitacional podem ser calculadas para qualquer

ponto. Para isso basta transladar os eixos coordenados, através da substituição dos

valores das coordenadas do prisma pela distância das mesmas ao ponto de

observação. Ou seja, o x1 do prisma, por exemplo, é substituído por x1 – x0, sendo x0

a coordenada do ponto de observação. Dessa forma, o ponto de observação passa

a ser a origem dos eixos coordenados.

Sendo o campo gravitacional um campo potencial e, por isso, conservativo,

temos:

yxxy gg (2.25a)

25

zyyz gg (2.25b)

zxxz gg (2.25c)

Como o campo gravitacional está sendo calculado na região externa à fonte, o

potencial é uma solução da equação de Laplace:

0 zzyyxx ggg (2.26)

Usando as relações acima, apenas 5 das 9 componentes do tensor precisam

ser calculadas:

Para calcular as componentes do tensor gradiente gravimétrico, é preciso

determinar as derivadas dos termos T1, T2 e T3 em relação a x, y e z. Os cálculos

dessas derivadas foram realizados na primeira etapa deste trabalho e são

apresentados abaixo:

xzyx

Rx

v

x

zyx

Rxv

x

Rxv

x

T

22

11

11ln1

21

222

21

222

R

v

x

T

1

(2.27a)

zzzyzxyyyx ggggg , , , ,

26

y

zyx

RxvRx

y

z

y

y

y

RxvRx

y

v

y

Rxv

y

T

kk2

12221

lnsincos

lnln

ln1

RxR

vyRx

y

Tk lncos1 (2.27b)

z

zyx

RxvRx

z

z

z

y

z

RxvRx

z

v

z

Rxv

z

T

kk2

12221

lnsincos

lnln

ln1

RxR

vzRx

z

Tk lnsin1 (2. 27c)

x

zyx

RvxRv

x

R

x

v

RvxRv

x

RvxRv

x

Rvx

x

T

21

222

2

1ln

1ln

lnln

ln

RvR

xRv

x

T 22 ln (2. 27d)

27

R

y

Rvx

y

R

y

v

Rvx

y

RvxRv

y

x

y

Rvx

y

T

kcos11

lnln

ln2

Rv

x

R

y

y

Tkcos2

(2. 27e)

R

z

Rvx

z

R

z

v

Rvx

z

Rvx

z

Rvx

z

T

ksin11

lnln2

Rv

x

R

z

z

Tksin2 (2. 27f)

x

vwwxRx

vwwxRxw

x

vwwxRxw

x

vw

wxRx

wvw

wxRx

x

w

x

vw

wxRxw

x

T

122

2122

1221

221

221

221

3

1

1tan

tan

tan

tan

222

22

23

2

wvQ

R

RxxR

vwx

T

(2. 27g)

28

y

vwwxRxwvwwxRx

y

vw

wxRx

wvw

wxRx

y

w

y

vw

wxRxw

y

T

k

12211221

221

221

221

3

tantansin

tan

tan

tan

222

2

13cos2sin

tansinwvQ

wQwQvR

vwxy

wvw

Q

y

T kk

k

(2. 27h)

z

vwwxRxwvwwxRx

z

vw

wxRx

wvw

wxRx

z

w

z

vw

wxRxw

z

T

k

12211221

221

221

221

3

tantancos

tan

tan

tan

222

2

13sin2cos

tancoswvQ

wQwQvR

vwxz

wvw

Q

z

T kk

k

(2. 27i)

onde

22 wxRxQ (2. 28)

Os sinais dos resultados das derivadas foram invertidos em função da

convenção do sentido positivo do eixo z para baixo (Figura 2.2).

29

3. Programa para o cálculo do tensor gradiente gravimétrico e da anomalia gravimétrica

3.1. Algoritmo Básico

A implementação do algoritmo básico foi realizada utilizando a linguagem de

programação C++, seguindo o paradigma da programação estruturada. Este

consiste em estruturar o programa em funções simples e bem definidas, facilitando o

desenvolvimento, a manutenção e o entendimento do código (Oualline, 2003).

A linguagem de programação C++ é uma linguagem de uso geral,

independente de plataforma e que suporta múltiplos paradigmas. Por ser uma

linguagem de alto nível que apresenta facilidades para o uso em baixo nível, a

compilação C++ gera um código muito eficiente. Outra característica importante

desta linguagem é a portabilidade, uma vez que é possível compilar o código C++,

sem a necessidade de realizar grandes alterações, em qualquer tipo de hardware e

sistema operacional.

No início da década de 90, a linguagem C++ apresentava desempenho

significativamente inferior quando comparada a outras linguagens procedurais, como

Fortran, por exemplo, no desenvolvimento de aplicações científicas. Por essa razão,

durante muito tempo, houve resistência em sua utilização para este fim. Entretanto,

em razão da otimização dos compiladores e do desenvolvimento de diversas

bibliotecas, sua performance evoluiu significativamente, chegando, em algumas

situações, a apresentar desempenho superior ao da linguagem Fortran (Veldhuizen,

1997). Além disso, a linguagem C++ possui ferramentas de desenvolvimento e

bibliotecas que auxiliam o desenvolvimento da interface gráfica com o usuário,

tornando a utilização da aplicação mais amigável.

O algoritmo desenvolvido pode ser dividido em três rotinas principais: entrada

de dados, na qual é feita a leitura dos dados do modelo e parâmetros para os

cálculos; processamento, onde são realizados os cálculos das componentes; e saída

de dados, que apresenta os resultados obtidos para cada componente.

30

3.1.1. Entrada de dados

A entrada dos dados consiste da primeira parte do algoritmo e está dividida em

duas etapas: a primeira faz a leitura dos parâmetros para a criação do modelo (figura

3.1), enquanto a segunda lê os parâmetros para a realização dos cálculos (figura

3.2).

Figura 3.1: Fluxograma da entrada dos dados para a criação do modelo.

Na criação do modelo, o usuário pode adicionar prismas, informando suas

coordenadas e seus valores de densidade. Os prismas podem ter tamanhos

Criar Modelo

Inserir novo prisma?

Recebe valores de

x1, x2, y1, y2, z1, z2 e ρ

S

Incrementa o número

de prismas

Atualiza o número total de prismas

Início

Fim

N

31

variados e é possível inserir quantos prismas forem necessários para simular a

feição geológica desejada. Este modelo pode ser salvo em arquivo para ser utilizado

posteriormente.

Os parâmetros utilizados para a representação desses dados no algoritmo são

as coordenadas do prisma (x1, x2, y1, y2, z1 e z2) e o valor de densidade do prisma

(ρ). O algoritmo assume que os valores de z são positivos para baixo e adota km

como unidade para os valores de distância e g/cm3 como unidade para os valores de

densidade.

Para a criação da grade de cálculo, é necessário que o usuário informe as

coordenadas espaciais dos pontos de observação. Esses dados são representados

pelo número de pontos de observação nas direções x e y (nptx e npty), pela

distância entre os pontos nas duas direções (dx e dy) e pela altura dos pontos de

observação (z0).

Figura 3.2: Fluxograma da entrada dos dados da grade de cálculo.

3.1.2. Processamento

Na etapa de processamento são realizados os cálculos da anomalia

gravimétrica – Gz – e das componentes do tensor gradiente gravimétrico – Gzx, Gzy,

Gzz, Gyx, Gyy, Gxx. Os valores de cada componente são calculados, em um ponto de

observação, para cada prisma do modelo e a resultante da componente neste ponto

é o somatório dos valores encontrados. Uma vez que a equação (2.14) fornece o

Recebe valores de nptx, dx,

npty, dy, z0

Início

Fim

32

valor das componentes na origem, para realizar o cálculo em outros pontos é

necessário transladar a origem dos eixos coordenados para o ponto de observação.

Para isso, as coordenadas do prisma são substituídas pela distância das mesmas ao

ponto de observação.

Os cálculos são realizados para as faces do prisma. Cada par de faces

paralelas do prisma contribui para uma das componentes do campo gravitacional, de

acordo com a direção do vetor n, que é um vetor unitário externo normal à face,

como representado na figura 3.3. Quando o vetor n é um vetor na direção x, as faces

contribuem com a componente Gx, quando o vetor n é um vetor na direção y, as

faces contribuem com a componente Gy e quando o vetor n é um vetor na direção z,

as faces contribuem com a componente Gz.

Figura 3.3: As faces 1 e 2 do prisma contribuem para a componente Gz, enquanto as faces

3 e 4 contribuem para a componente Gy.

Uma vez que apenas 5 das 9 componentes do tensor gradiente gravimétrico

precisam ser calculadas diretamente – Gzx, Gzy, Gzz, Gyx e Gyy – apenas 4 das 6

faces do prisma serão utilizadas nos cálculos: as faces que contribuem para as

componentes Gy e Gz do campo gravitacional (figura 3.3).

As figuras 3.4 e 3.5 apresentam os fluxogramas das etapas de processamento

e dos cálculos da anomalia gravimétrica e das componentes do tensor.

z

y

1

2

3 4

n

n

n

n

33

Figura 3.4: Fluxograma que descreve a etapa de processamento do algoritmo, onde são selecionados

os prismas, os pontos de observação e realizados os cálculos das componentes.

Início

Fim

Seleciona prisma

O prisma existe?

Seleciona coordenadas do

ponto de observação

S

O ponto existe?

N

Calcula valores de cada componente

no ponto

Translada a origem dos eixos para o ponto

de observação

Seleciona próximo prisma

S

Seleciona coordenadas do

próximo ponto de observação

Soma os valores obtidos aos valores existentes de cada

componente no ponto

N

34

Figura 3.5: Fluxograma que detalha os cálculos das componentes do tensor gradiente

gravimétrico e da anomalia gravimétrica.

O cálculo da anomalia gravimétrica é realizado utilizando a equação (2.14). As

componentes do tensor gradiente gravimétrico são dadas pela mesma equação,

porém utilizando as derivadas dos termos T1, T2 e T3 em relação x, y e z, dadas

pelas equações (2.27a) a (2.27i).

Início

Fim

Determina coordenadas dos vértices do prisma

Face <= 4?N

Soma = Soma +

(n*(T1+T2+T3))

Calcula termos T1, T2 e T3

Componente = G*ρ*Soma

S

Seleciona próxima face do prisma

Seleciona face 1 do prisma

Soma = 0

35

3.1.3. Saída de dados

Após a realização dos cálculos, uma matriz é gerada para cada componente,

armazenando seus resultados em cada ponto de observação. Estes resultados são

apresentados na saída de dados, através de sua impressão na tela e de sua

gravação em arquivos em disco, como representado na figura 3.6. As unidades

utilizadas são mGal para a anomalia gravimétrica e Eötvös (mGal/km) para as

componentes do tensor.

Figura 3.6: Fluxograma que descreve a etapa de saída de dados.

Início

Fim

Seleciona ponto de observação

O ponto existe?

S

Imprime valor da componente na tela

N

Seleciona próximo ponto de

observação

Grava valor da componente no

arquivo

36

3.2. A Interface Gráfica

A interface com o usuário é a parte visível de uma aplicação, através da qual é

realizada a comunicação entre as partes envolvidas para a realização das tarefas.

Uma vez que o cérebro humano interpreta mais facilmente imagens do que palavras,

a interface gráfica possibilita uma interação homem-máquina mais amigável e

funcional, permitindo que o usuário se preocupe apenas com o problema a ser

resolvido. Dessa forma, a interface desenvolvida para a aplicação permite que o

usuário visualize e manipule o modelo que está sendo criado de maneira mais

intuitiva, além de poder observar graficamente os resultados, tornando a utilização

da aplicação mais simples e eficiente.

A interface gráfica do programa foi desenvolvida utilizando o ambiente de

desenvolvimento integrado Microsoft Visual C++ 2008 Express Edition. Este

ambiente oferece um conjunto de ferramentas visuais que permitem a criação de

aplicações com interface gráfica de maneira prática e rápida.

Dentro da interface da aplicação, a biblioteca de rotinas gráficas OpenGL é

utilizada para gerar a visualização do modelo de prismas, correspondente à feição

geológica, e dos gráficos dos resultados. OpenGL é definida como uma interface de

software para hardware gráfico. Esta API (Application Programming Interface) escrita

em C, possibilita a geração de gráficos bidimensionais e tridimensionais, tendo como

principais características sua portabilidade, qualidade visual e velocidade de

execução. Programas escritos em C/C++ podem chamar facilmente funções

OpenGL, uma vez que é fornecido um conjunto de funções C intermediárias (Wright

e Sweet, 2000).

A interface do programa é composta por uma janela principal, através da qual

são realizados os procedimentos de entrada e saída dos dados. Esta janela possui

um menu principal, que apresenta as opções para criar um novo modelo de prismas,

abrir modelos já existentes, armazenados em disco; fechar o modelo, caso tenha

sido criado ou aberto; e sair da aplicação (figura 3.7).

Ao selecionar a opção de criar novo modelo, o programa solicita que o usuário

informe a dimensão dos eixos coordenados para a criação do modelo, como

mostrado na figura 3.8.

37

Figura 3.7: Tela inicial, apresentando o menu com as opções para o usuário.

Figura 3.8: Tela onde o usuário deve determinar a dimensão dos eixos coordenados.

38

Após informar a dimensão dos eixos, o programa exibe a tela com as opções

para a criação e visualização do modelo (figura 3.9). No canto superior esquerdo

encontra-se a janela OpenGL, contendo a visualização do modelo, que exibe os

eixos coordenados, onde serão inseridos os prismas. Abaixo dela, existem as

opções de manipulação da imagem, permitindo ao usuário rotacionar e aproximar ou

distanciar o modelo. Assim, é possível visualizá-lo de diferentes ângulos, aproximar

a imagem, para visualizar seus detalhes, ou afastá-la, podendo visualizar o modelo

como um todo.

À direita do modelo gerado são apresentados os campos através dos quais o

usuário deverá informar os parâmetros do prisma. Os três primeiros campos

correspondem às dimensões do prisma nas direções x, y e z, dadas em km. No

campo seguinte, deve ser informado o valor de densidade do prisma, dada em

g/cm3. Os três últimos campos correspondem às coordenadas do vértice superior

esquerdo da face frontal do prisma, chamado na aplicação de vértice 0. O usuário

pode ainda escolher a cor do prisma que será adicionado.

Figura 3.9: Tela para criação e visualização da feição geológica, através de um conjunto de prismas.

39

Todos os campos da janela apresentada são obrigatórios e são validados

durante sua digitação, não permitindo que o usuário deixe de preencher alguma

informação ou informe valores inválidos.

Após o usuário informar todos os dados e clicar no botão adicionar, o sistema

insere o prisma no modelo e atualiza sua exibição na janela (figura 3.10).

Figura 3.10: Visualização do modelo com somente um prisma adicionado.

Dessa forma, o usuário pode inserir quantos prismas desejar para a criação da

feição geológica. Durante este processo, ele tem a opção de desfazer a inserção

dos prismas. Ao clicar no botão desfazer, o sistema confirma se o usuário deseja

realmente desfazer a última ação e, caso ele confirme, o último prisma inserido é

removido. É possível desfazer a inclusão de prismas até o ponto onde o modelo foi

salvo pela última vez.

40

A figura 3.11 apresenta o modelo de uma feição geológica arbitrária,

representada através de um conjunto de prismas.

Figura 3.11: Representação de uma feição geológica. Esta imagem foi rotacionada e afastada,

utilizando as ferramentas do programa, para melhor visualização do modelo criado.

O botão salvar permite que o usuário salve o modelo em arquivo. Ele pode

executar esta operação diversas vezes durante e ao final a criação do modelo.

No canto inferior direito da janela encontram-se os botões Calcular, que dá

acesso às opções para a realização dos cálculos, e Excluir, que permite apagar o

modelo que está sendo visualizado. A opção de Alterar estará habilitada apenas

para modelos já existentes, abertos pelo usuário.

Após criar ou abrir um modelo, caso seja selecionada a opção para calcular a

anomalia gravimétrica e as componentes do tensor resultantes deste modelo, o

sistema exibe na tela as informações necessárias para a criação da grade de

cálculo, como mostrado na figura 3.12. Nesta tela o usuário informa o número de

pontos de observação nas direções x e y, a distância entre esses pontos e sua

41

altura. Além disso, ele pode selecionar quais componentes serão calculadas,

podendo fazer qualquer combinação, desde que ao menos uma tenha sido

selecionada. Após a realização dos cálculos, a aplicação oferece a opção de salvar

os resultados obtidos em arquivo. Mesmo que os resultados não sejam salvos, ainda

assim é oferecida a opção de plotagem dos gráficos das componentes calculadas.

Figura 3.12: Tela com opções para a realização dos cálculos.

Por fim, é disponibilizada uma tela com a lista das componentes que foram

calculadas. Assim, é possível escolher a componente e gerar o gráfico com seus

valores (figura 3.13).

42

Figura 3.13: Tela onde são disponibilizadas as opções de plotagem dos gráficos das

componentes do tensor gradiente gravimétrico e anomalia gravimétrica.

43

4. Validação do Algoritmo

Com o objetivo de validar os resultados gerados para cada componente do

tensor gradiente gravimétrico e para a anomalia gravimétrica, foram realizados

testes a partir de exemplos encontrados na literatura, durante e ao final do processo

de implementação do algoritmo.

Para os testes, foi utilizado o modelo sintético apresentado como exemplo por

Montana et al. (1992). Este modelo, apresentado pela figura 4.1, é composto por

quatro prismas retangulares, todos com dimensões de 2x2x2 km e valores de

densidades de 2,65 g/cm3, que corresponde ao valor de densidade do quartzo. A

disposição dos prismas está descrita na tabela 4.1, que apresenta os parâmetros de

entrada utilizados para a criação do modelo.

Os cálculos, cujos resultados são apresentados neste capítulo, foram

realizados em uma grade de 10x10 pontos de observação na superfície, com

distância de 1 km entre eles. Com o objetivo de gerar gráficos com melhor

resolução, foi utilizada uma grade mais fina, composta de 40x40 pontos na

superfície, com distância de 250 m entre eles. Os parâmetros de entrada utilizados

para a criação da grade de cálculo são descritos na tabela 4.2.

Tabela 4.1: Parâmetros de entrada utilizados nos testes de validação: dimensões, valores de

densidade e coordenadas dos prismas do modelo. Esses valores correspondem ao modelo

apresentado como exemplo por Montana et al. (1992).

Dimensões Coordenadas

Prisma x y z ρ x0 y0 z0

1 2 2 2 2,65 2,5 5,5 0,01

2 2 2 2 2,65 4,5 5,5 0,01

3 2 2 2 2,65 2,5 5,5 2,01

4 2 2 2 2,65 4,5 5,5 2,01

44

Figura 4.1: Visualização, gerada pela aplicação desenvolvida, do modelo correspondente ao

exemplo apresentado por Montana et al. (1992).

Tabela 4.2: Parâmetros dos pontos de observação.

Parâmetro Valor

Número de pontos de observação na direção x 10

Distância entre os pontos de observação na direção x 1 km

Número de pontos de observação na direção y 10

Distância entre os pontos de observação na direção y 1 km

Altura dos pontos de observação 0 km

A tabela 4.3 apresenta os resultados gerados pelo programa para a

componente Gxx do tensor gradiente gravimétrico. Esses resultados são

apresentados graficamente na figura 4.2.

45

Tabela 4.3: Resultados obtidos para a componente Gxx. Os valores das coordenadas x e y são dados em km e os valores de

Gxx são medidos em Eötvös (mGal/km).

x y

0 1 2 3 4 5 6 7 8 9

0 4,603 -2,959 -15,069 -28,498 -37,317 -37,317 -28,498 -15,069 -2,959 4,603

1 13,787 4,488 -16,603 -44,107 -62,343 -62,343 -44,107 -16,603 4,488 13,787

2 31,187 25,826 -9,389 -73,324 -109,803 -109,803 -73,324 -9,389 25,826 31,187

3 57,544 77,088 53,095 -159,175 -194,971 -194,971 -159,175 53,095 77,088 57,544

4 80,993 143,127 298,287 -420,495 -288,932 -288,932 -420,495 298,287 143,127 80,993

5 80,993 143,127 298,287 -420,495 -288,932 -288,932 -420,495 298,287 143,127 80,993

6 57,544 77,088 53,095 -159,175 -194,971 -194,971 -159,175 53,095 77,088 57,544

7 31,187 25,826 -9,389 -73,324 -109,803 -109,803 -73,324 -9,389 25,826 31,187

8 13,787 4,488 -16,603 -44,107 -62,343 -62,343 -44,107 -16,603 4,488 13,787

9 4,603 -2,959 -15,069 -28,498 -37,317 -37,317 -28,498 -15,069 -2,959 4,603

46

Figura 4.2: Componente Gxx do tensor gradiente gravimétrico.

A tabela 4.4 apresenta os resultados obtidos para a componente Gyx do tensor

gradiente gravimétrico. A figura 4.3 apresenta os gráficos gerados a partir esses

resultados.

47

Tabela 4.4: Resultados obtidos para a componente Gyx. Os valores das coordenadas x e y são dados em km e os

valores de Gyx são medidos em Eötvös (mGal/km).

x y

0 1 2 3 4 5 6 7 8 9

0 25,654 31,065 32,021 24,735 9,333 -9,333 -24,735 -32,021 -31,065 -25,654

1 34,656 47,758 55,403 45,615 17,412 -17,412 -45,615 -55,403 -47,758 -34,656

2 42,382 70,644 101,151 89,599 32,391 -32,391 -89,599 -101,151 -70,644 -42,382

3 40,068 85,414 196,239 185,942 48,419 -48,419 -185,942 -196,239 -85,414 -40,068

4 17,417 43,690 130,407 126,130 27,422 -27,422 -126,130 -130,407 -43,690 -17,417

5 -17,417 -43,690 -130,407 -126,130 -27,422 27,422 126,130 130,407 43,690 17,417

6 -40,068 -85,414 -196,239 -185,942 -48,419 48,419 185,942 196,239 85,414 40,068

7 -42,382 -70,644 -101,151 -89,599 -32,391 32,391 89,599 101,151 70,644 42,382

8 -34,656 -47,758 -55,403 -45,615 -17,412 17,412 45,615 55,403 47,758 34,656

9 -25,654 -31,065 -32,021 -24,735 -9,333 9,333 24,735 32,021 31,065 25,654

48

Figura 4.3: Componente Gyx do tensor gradiente gravimétrico.

A tabela 4.5 apresenta os resultados gerados pelo programa para a

componente Gyy do tensor. Esses resultados são apresentados graficamente na

figura 4.4.

49

Tabela 4.5: Resultados obtidos para a componente Gyy. Os valores das coordenadas x e y são dados em km e os

valores de Gyy são medidos em Eötvös (mGal/km).

x y

0 1 2 3 4 5 6 7 8 9

0 9,123 19,976 35,424 51,654 62,089 62,089 51,654 35,424 19,976 9,123

1 3,649 17,950 44,372 76,516 97,489 97,489 76,516 44,372 17,950 3,649

2 -9,692 2,891 46,152 117,299 158,125 158,125 117,299 46,152 2,891 -9,692

3 -32,372 -42,407 -7,881 212,383 253,893 253,893 212,382 -7,881 -42,407 -32,372

4 -53,571 -104,713 -249,433 -611,118 -737,795 -737,795 -611,118 -249,433 -104,713 -53,571

5 -53,571 -104,713 -249,433 -611,118 -737,795 -737,795 -611,118 -249,433 -104,713 -53,571

6 -32,372 -42,407 -7,881 212,383 253,893 253,893 212,382 -7,881 -42,407 -32,372

7 -9,692 2,891 46,152 117,299 158,125 158,125 117,299 46,152 2,891 -9,692

8 3,649 17,950 44,372 76,516 97,489 97,489 76,516 44,372 17,950 3,649

9 9,123 19,976 35,424 51,654 62,089 62,089 51,654 35,424 19,976 9,123

50

Figura 4.4: Componente Gyy do tensor gradiente gravimétrico.

A tabela 4.6 apresenta os resultados obtidos para a componente Gzx do tensor

gradiente gravimétrico. Os resultados dessa componente são apresentados

graficamente pela figura 4.5.

51

Tabela 4.6: Resultados obtidos para a componente Gzx. Os valores das coordenadas x e y são dados em km e os

valores de Gzx são medidos em Eötvös (mGal/km).

x y

0 1 2 3 4 5 6 7 8 9

0 10,121 11,970 12,089 9,220 3,462 -3,462 -9,220 -12,089 -11,970 -10,121

1 16,981 22,464 25,107 20,293 7,734 -7,734 -20,293 -25,107 -22,464 -16,981

2 27,880 43,209 57,190 49,472 18,316 -18,316 -49,472 -57,190 -43,209 -27,880

3 42,214 80,382 154,035 142,858 41,841 -41,841 -142,858 -154,035 -80,382 -42,214

4 53,852 120,337 372,025 358,289 70,584 -70,584 -358,289 -372,025 -120,337 -53,852

5 53,852 120,337 372,025 358,289 70,584 -70,584 -358,289 -372,025 -120,337 -53,852

6 42,214 80,382 154,035 142,858 41,841 -41,841 -142,858 -154,035 -80,382 -42,214

7 27,880 43,209 57,190 49,472 18,316 -18,316 -49,472 -57,190 -43,209 -27,880

8 16,981 22,464 25,107 20,293 7,734 -7,734 -20,293 -25,107 -22,464 -16,981

9 10,121 11,970 12,089 9,220 3,462 -3,462 -9,220 -12,089 -11,970 -10,121

52

Figura 4.5: Componente Gzx do tensor gradiente gravimétrico.

Os resultados obtidos para a componente Gzy do tensor são apresentados pela

tabela 4.7. A figura 4.6 apresenta o gráfico gerado a partir dos resultados dessa

componente.

53

Tabela 4.7: Resultados obtidos para a componente Gzy. Os valores das coordenadas x e y são dados em km e os

valores de Gzy são medidos em Eötvös (mGal/km).

x y

0 1 2 3 4 5 6 7 8 9

0 11,241 17,536 25,549 33,442 38,387 38,387 33,442 25,549 17,536 11,241

1 14,953 26,453 43,713 62,657 74,820 74,820 62,657 43,713 26,453 14,953

2 17,846 37,644 77,296 130,104 162,331 162,331 130,104 77,296 37,644 17,846

3 16,388 42,826 135,430 366,558 451,241 451,241 366,558 135,430 42,826 16,388

4 6,984 21,048 85,854 277,658 338,816 338,816 277,658 85,854 21,048 6,984

5 -6,984 -21,048 -85,854 -277,658 -338,816 -338,816 -277,658 -85,854 -21,048 -6,984

6 -16,388 -42,826 -135,430 -366,558 -451,241 -451,241 -366,558 -135,430 -42,826 -16,388

7 -17,846 -37,644 -77,296 -130,104 -162,331 -162,331 -130,104 -77,296 -37,644 -17,846

8 -14,953 -26,453 -43,713 -62,657 -74,820 -74,820 -62,657 -43,713 -26,453 -14,953

9 -11,241 -17,536 -25,549 -33,442 -38,387 -38,387 -33,442 -25,549 -17,536 -11,241

54

Figura 4.6: Componente Gzy do tensor gradiente gravimétrico.

A tabela 4.8 apresenta os resultados gerados pelo programa para a

componente Gzz do tensor gradiente gravimétrico. Os resultados dessas

componentes são apresentados graficamente na figura 4.7.

55

Tabela 4.8: Resultados obtidos para a componente Gzz. Os valores das coordenadas x e y são dados em km e os

valores de Gzz são medidos em Eötvös (mGal/km).

x y

0 1 2 3 4 5 6 7 8 9

0 -13,726 -17,016 -20,355 -23,156 -24,772 -24,772 -23,156 -20,355 -17,016 -13,726

1 -17,437 -22,438 -27,769 -32,410 -35,146 -35,146 -32,410 -27,769 -22,438 -17,437

2 -21,494 -28,718 -36,763 -43,975 -48,322 -48,322 -43,975 -36,763 -28,718 -21,494

3 -25,172 -34,680 -45,214 -53,208 -58,922 -58,922 -53,208 -45,214 -34,680 -25,172

4 -27,422 -38,414 -48,854 1031,613 1026,727 1026,728 1031,613 -48,854 -38,414 -27,422

5 -27,422 -38,414 -48,854 1031,613 1026,727 1026,728 1031,613 -48,854 -38,414 -27,422

6 -25,172 -34,680 -45,214 -53,208 -58,922 -58,922 -53,208 -45,214 -34,680 -25,172

7 -21,494 -28,718 -36,763 -43,975 -48,322 -48,322 -43,975 -36,763 -28,718 -21,494

8 -17,437 -22,438 -27,769 -32,410 -35,146 -35,146 -32,410 -27,769 -22,438 -17,437

9 -13,726 -17,016 -20,355 -23,156 -24,772 -24,772 -23,156 -20,355 -17,016 -13,726

56

Figura 4.7: Componente Gzz do tensor gradiente gravimétrico.

A tabela 4.9 apresenta os resultados gerados pelo programa para Gz,

correspondente à anomalia gravimétrica. Os resultados de Gz são apresentados

graficamente na figura 4.8.

57

Tabela 4.9: Resultados obtidos para a componente Gz. Os valores das coordenadas x e y são dados em km e os

valores de Gz são medidos em mGal.

x y

0 1 2 3 4 5 6 7 8 9

0 3,636 4,748 5,972 7,064 7,716 7,716 7,064 5,972 4,748 3,636

1 4,944 6,921 9,342 11,685 13,134 13,134 11,685 9,342 6,921 4,944

2 6,601 10,120 15,217 20,804 24,300 24,300 20,804 15,217 10,120 6,601

3 8,368 14,268 25,667 42,505 51,506 51,506 42,505 25,667 14,268 8,368

4 9,603 17,748 38,974 107,354 125,559 125,559 107,354 38,974 17,748 9,603

5 9,603 17,748 38,974 107,354 125,559 125,559 107,354 38,974 17,748 9,603

6 8,368 14,268 25,667 42,505 51,506 51,506 42,505 25,667 14,268 8,368

7 6,601 10,120 15,217 20,804 24,300 24,300 20,804 15,217 10,120 6,601

8 4,944 6,921 9,342 11,685 13,134 13,134 11,685 9,342 6,921 4,944

9 3,636 4,748 5,972 7,064 7,716 7,716 7,064 5,972 4,748 3,636

58

Figura 4.8: Representação gráfica da anomalia gravimétrica resultante do modelo.

Os valores gerados pelo programa, bem como sua representação gráfica,

correspondem aos resultados esperados, relatados por Montana et al. (1992). Dessa

forma, foi possível constatar a estabilidade das rotinas implementadas e a validade dos

resultados obtidos.

59

5. Resultados e Discussão

Os gradientes gravimétricos permitem determinar o campo da gravidade com

maior resolução e precisão do que a anomalia da gravidade tomada isoladamente

(Stanley e Green, 1976). As componentes do tensor gradiente gravimétrico estão

relacionadas às bordas, aos cantos e ao centro de massa da fonte (Bell, 1997). Dessa

forma, o cálculo das componentes do tensor gradiente gravimétrico fornece informações

mais detalhadas sobre um corpo em subsuperfície, revelando diversas características

de sua forma e distribuição de massa.

Com o objetivo de analisar as respostas obtidas através da aplicação desenvolvida

e avaliar sua estabilidade e funcionalidade, foram realizados alguns testes, que são

apresentados a seguir, utilizando simulações de corpos de forma simples e feições

geológicas.

5.1. Cálculo das respostas para corpos de forma simples

Para verificar a resposta do programa a um corpo de forma simples, foi realizado

um teste no qual foram calculadas as componentes do tensor gradiente gravimétrico e

da anomalia gravimétrica resultantes de um corpo de forma cúbica, cuja resposta é

conhecida na literatura (Bell, 1997; Braga, 2006; Mikhailov e Diament, 2006). O corpo

modelado, mostrado na figura 5.1, possui dimensões 1x1x1 km e valor de densidade

2,7 g/cm3, correspondente ao valor de densidade média da crosta continental. Os

cálculos foram realizados em uma grade de 40x40 pontos de observação na superfície,

com uma distância de 250 m entre esses pontos. A tabela 5.1 apresenta os parâmetros

de entrada utilizados para a criação da grade de cálculo.

60

Figura 5.1: Visualização do modelo de um corpo simples, utilizado no teste.

Tabela 5.1: Parâmetros de entrada para a criação da grade de cálculo.

Parâmetro Valor

Número de pontos de observação na direção x 40

Distância entre os pontos de observação na direção x 0,25 km

Número de pontos de observação na direção y 40

Distância entre os pontos de observação na direção y 0,25 km

Altura dos pontos de observação 0 km

61

A figura 5.2 apresenta o resultado da componente Gxx do tensor gradiente

gravimétrico resultante da fonte cúbica. É possível observar no gráfico a presença de

dois altos, ambos com valores de 10,755 eötvös, que delimitam as bordas Norte-Sul do

cubo, e um baixo no valor de -51,349 eötvös, no local onde se encontra o corpo.

Figura 5.2: Componente Gxx resultante de um cubo simples.

62

A figura 5.3 apresenta o resultado da componente Gyy do tensor. Assim como na

componente Gxx observa-se a presença de dois altos, ambos com valores de 10,755

eötvös, neste caso associados às bordas Leste-Oeste do cubo, e um baixo no valor de -

51,349 eötvös, no local onde se encontra o corpo.

Figura 5.3: Componente Gyy resultante do cubo.

63

O resultado da componente Gyx do tensor é apresentado na figura 5.4. No gráfico

desta componente, pode-se observar a presença de dois altos e dois baixos, nos

valores de 14,513 e -14,513 eötvös, respectivamente, que marcam os cantos do corpo.

Figura 5.4: Componente Gyx resultante do cubo.

64

A figura 5.5 apresenta o resultado da componente Gzx do tensor. Neste gráfico

observa-se um par de alto e baixo, nos valores de 45,111 e -45,111 eötvös.

Figura 5.5: Componente Gzx resultante do cubo.

O gráfico do resultado da componente Gzy do tensor é mostrado na figura 5.6.

Assim como na componente Gzx, é possível observar um alto, no valor de 45,111

65

eötvös, e um baixo, no valor de -45,111 eötvös. Essas duas componentes juntas estão

relacionadas ao centro de massa da fonte.

Figura 5.6: Componente Gzy resultante do cubo.

A intersecção das regiões entre os pares alto-baixo dessas componentes

determina a posição do centro de massa do corpo. Analisando os resultados para este

66

exemplo é possível determinar que o centro de massa do cubo tem projeção no centro

do plano horizontal (x = 5 km, y = 5 km).

Uma característica interessante observada nos resultados apresentados é a

existência de uma simetria entre os valores das componentes. Tal simetria ocorre em

virtude da geometria do corpo estudado.

Figura 5.7: Componente Gzz resultante do cubo.

67

A figura 5.7 exibe o gráfico do resultado da componente Gzz do tensor. Este gráfico

apresenta um alto, no valor de 102,698 eötvös, na posição onde se encontra o corpo.

Esta componente identifica os limites do corpo.

Figura 5.8: Anomalia Gravimétrica gerada pelo cubo.

68

A figura 5.8 apresenta o gráfico da anomalia gravimétrica gerada pelo corpo

cúbico. Neste gráfico observa-se, como na componente Gzz, um alto na posição onde

se encontra o corpo, no valor de 7,898 mGal. Entretanto, a informação apresentada é

menos precisa que a da componente do tensor. Analisando somente a anomalia

gravimétrica, observa-se apenas um padrão difuso centrado na fonte, enquanto as

componentes do tensor gradiente gravimétrico conseguem determinar com maior

precisão as características da mesma.

Dessa maneira, fica evidenciado que através da análise dos gradientes

gravimétricos é possível obter mais informações sobre um corpo em subsuperfície que

analisando apenas a componente vertical da gravidade. A interpretação desses

gradientes permite definir com maior exatidão a forma e a posição do corpo. Por essa

razão, as informações obtidas com os gradientes gravimétricos estão sendo cada vez

mais utilizadas na prospecção de recursos minerais, sobretudo associadas a outros

métodos geofísicos, como o método sísmico (Coburn e Schneider, 2002; Biegert, 2007).

Apesar dos significativos avanços na parte instrumental para levantamento dos

dados de gradiometria gravimétrica, a metodologia para interpretação das componentes

do tensor ainda não experimentou uma evolução compatível (Mikhailov e Diament,

2006). Dessa forma, as interpretações apresentadas para as relações entre as

componentes do tensor e as características da fonte, amplamente relatadas na

literatura, são baseadas em observações empíricas.

5.2. Cálculo a partir de dados sintéticos

O modelo sintético, apresentado na figura 5.9, foi gerado visando observar a

resposta do programa a uma feição geológica simples. Os parâmetros de entrada

utilizados para a criação do modelo são descritos na tabela 5.2, enquanto a tabela 5.3

apresenta os parâmetros utilizados para a criação da grade de cálculo.

69

Tabela 5.2: Parâmetros de entrada: dimensões, valores de densidade e coordenadas dos prismas que

compõem o modelo.

Dimensões Coordenadas

Prisma x y z ρ x0 y0 z0

1 6,5 4 0,4 2,7 1,7 6,7 3,6

2 7 4,3 0,5 2,7 1,5 6,85 3,1

3 7,2 4,1 0,4 2,7 1,3 6,75 2,7

4 7 3,8 0,3 2,7 1,5 6,6 2,4

5 3 3,5 0,4 2,7 1,7 6,45 2

6 2,3 3,2 0,4 2,7 2 6,3 1,6

7 1,5 2,9 0,4 2,7 2,3 6,15 1,2

8 0,5 3,2 0,2 2,7 4,7 6,3 2,2

9 2,8 3,5 0,4 2,7 5,7 6,45 2

10 2,3 3,2 0,5 2,7 6 6,3 1,5

11 2 2,9 0,3 2,7 6,2 6,15 1,2

12 1,5 2,5 0,4 2,7 6,5 6 0,8

13 1 2 0,4 2,7 6,75 5,75 0,4

14 0,5 1 0,2 2,7 7 5,5 0,2

Tabela 5.3: Parâmetros de entrada para a criação da grade de cálculo.

Parâmetro Valor

Número de pontos de observação na direção x 40

Distância entre os pontos de observação na direção x 0,25 km

Número de pontos de observação na direção y 40

Distância entre os pontos de observação na direção y 0,25 km

Altura dos pontos de observação 0 km

70

Figura 5.9: Feição geológica sintética modelada para o cálculo das componentes do tensor

e da anomalia gravimétrica.

A figura 5.10 apresenta a resposta da componente Gxx do tensor gradiente

gravimétrico para feição geológica modelada. Uma vez que a feição apresenta dois

picos, os altos mostrados na figura delimitam as bordas Norte-Sul desses picos,

enquanto os dois baixos definem suas posições.

A figura 5.11 mostra o gráfico da componente Gyy do tensor resultante da feição

modelada. Os altos apresentados na imagem mostram as bordas Leste-Oeste da

feição, enquanto os baixos determinam a posição do corpo. Assim como na

componente Gxx, o mínimo global da função está associado ao ponto mais alto da

feição.

71

Figura 5.10: Gráfico da componente Gxx resultante da feição modelada.

Figura 5.11: Gráfico da componente Gyy resultante da feição modelada.

A figura 5.12 mostra o resultado da componente Gyx do tensor para a feição

geológica. Esta componente apresenta altos e baixos que marcam os cantos da feição.

Por esta apresentar dois picos, são observados dois conjuntos de quádruplos, com 2

altos e 2 baixos cada um. Na posição do pico mais baixo, os padrões de altos e baixos

apresentados são mais difusos, uma vez que, pela peculiaridade da feição, existe

interferência entre os sinais gerados.

72

Figura 5.12: Gráfico da componente Gyx resultante da feição modelada.

O gráfico dos resultados obtidos para a componente Gzx do tensor gradiente

gravimétrico é apresentado na figura 5.13. Este gráfico mostra dois pares alto-baixo,

cada par referente a um pico da feição.

Figura 5.13: Gráfico da componente Gzx resultante da feição modelada.

A resposta da componente Gzy do tensor à feição é apresentada na figura 5.14.

Assim como na componente Gzx, observam-se dois pares alto-baixo, referentes aos

73

picos da feição. Como já foi dito, essas duas componentes estão relacionadas ao

centro de massa do corpo.

Figura 5.14: Gráfico da componente Gzy resultante da feição modelada.

A figura 5.15 mostra o gráfico do resultado da componente Gzz do tensor,

apresentando dois altos nas posições dos picos da feição. Esta componente permite

identificar os limites do corpo.

Figura 5.15: Gráfico da componente Gzz resultante da feição modelada.

74

O gráfico da anomalia gravimétrica gerada pela feição modelada é apresentado na

figura 5.16. Neste gráfico é possível observar, como na componente Gzz, dois altos

sobre a feição, porém com menos definição que os padrões apresentados pela

componente do tensor.

Figura 5.16: Gráfico da anomalia gravimétrica gerada pela feição modelada.

A partir da análise dos resultados apresentados, observa-se a eficiência das

componentes do tensor em definir com significativa precisão as características do

corpo.

Matematicamente, todas as informações do tensor gradiente gravimétrico estão

contidas no vetor do campo gravimétrico, apesar de parecer que os gradientes

fornecem informações adicionais. Entretanto, não é possível recuperar com precisão

todas essas informações a partir do vetor do campo de gravidade (Biegert, 2007), o que

justifica a realização de levantamentos de gradiometria.

75

5.3. Cálculo a partir de dados reais

Com o objetivo de avaliar a aplicabilidade do programa desenvolvido, foram

realizados testes a partir de dados reais. Foi modelado, com base em informações

obtidas em Slavec et al. (2004), o Maciço Alcalino de Poços de Caldas, localizado na

divisa entre os estados de São Paulo e Minas Gerais, na região SE do Brasil. Esta

feição apresenta uma área superficial de aproximadamente 800 km2, volume total

estimado em 7.220 km3 e profundidade média de 8 km, chegando a aproximadamente

17 km na raiz mais profunda.

Os autores dividem a feição em 4 grupos, de acordo com os valores de densidade

apresentados. Esta separação também foi considerada na criação do modelo,

apresentado pelas figuras 5.17 e 5.18, e é descrita na tabela 5.4.

Tabela 5.4: Divisão do Maciço, considerando os valores de densidade (Slavec et al.,2004).

Grupo Densidade (g/cm3) Rocha

Verde 2,62 Fenolitos

Amarelo 2,54 Fonolitos e Nefelina-sienitos

Vermelho 2,50 Fonolitos e Nefelina-sienitos

Azul 2,47 Fonolitos e intrusivas

A partir do modelo criado, foram calculadas as componentes do tensor gradiente

gravimétrico e a anomalia gravimétrica, cujos resultados são apresentados pelas figuras

5.19 a 5.20.

76

Figura 5.17: Modelo do Maciço Alcalino de Poços de Caldas, criado através da aplicação utilizando um

conjunto de prismas retangulares – visão superior.

Figura 5.18: Modelo do Maciço observado a partir de outras perspectivas.

77

Figura 5.19: Componentes Gxx, Gyy e Gyx resultantes do modelo do Maciço.

78

Figura 5.20: Componentes Gzx, Gzy e Gzz resultantes do modelo do Maciço.

79

Figura 5.21: Anomalia gravimétrica gerada pelo modelo do Maciço.

Assim como observado nos tópicos 5.1 e 5.2, a análise dos resultados das

componentes do tensor gradiente gravimétrico permite a identificação das

características da fonte, sobretudo a forma geral do Maciço, não permitindo, porém,

identificar com facilidade e clareza os diferentes grupos litológicos que compõem o

corpo. Note-se que esta análise foi baseada apenas na informação visual, mas técnicas

de realce e processamento dos dados eventualmente podem permitir obter mais

detalhes sobre o corpo estudado.

80

6. Conclusão

As componentes do tensor gradiente gravimétrico foram utilizadas com sucesso na

exploração de recursos minerais na primeira metade do século passado. Porém, esta

metodologia caiu em desuso durante muito tempo, devido à dificuldade de obtenção

dos dados e de sua interpretação. O interesse nestas informações foi retomado devido

à sua aplicação para fins militares, resultando em significativos avanços nas tecnologias

para sua aquisição.

Apesar da componente vertical do campo de gravidade ainda ser medida com

maior freqüência, devido à facilidade de sua obtenção e da interpretação de seus

resultados, os gradientes gravimétricos estão sendo utilizados cada vez mais na

prospecção de minério e petróleo, devido ao maior detalhamento e à maior precisão

com seus dados permitem identificar corpos em subsuperfície.

Neste trabalho, foi desenvolvido um programa que permite calcular o tensor

gradiente gravimétrico e a anomalia gravimétrica resultantes de um conjunto de prismas

retangulares. Uma vez que é possível representar qualquer feição geológica através de

prismas, é possível modelar, utilizando o programa, uma feição geológica e determinar

os valores dos gradientes gravimétricos e da anomalia gravimétrica resultantes. Assim,

os resultados gerados pela aplicação podem auxiliar na validação e interpretação dos

dados obtidos por instrumentos, através da comparação entre eles.

O programa desenvolvido possui uma interface gráfica, tornando a interação com

o usuário mais amigável, por permitir que ele visualize e manipule o modelo que está

sendo criado, além de apresentar graficamente os resultados obtidos. A interface

gráfica torna a utilização da aplicação mais eficiente uma vez que permite que o usuário

se concentre apenas no problema a ser resolvido.

Com o objetivo de validar os resultados gerados pelo programa, foram realizados

testes, que consistiram na simulação de um modelo cujos resultados são encontrados

na literatura. Utilizando o programa, os valores dos gradientes gravimétricos e da

anomalia gravimétrica foram calculados para o modelo simulado e comparados com os

81

resultados publicados. Os resultados obtidos corresponderam aos valores esperados,

mostrando a estabilidade e validade das rotinas de cálculo implementadas.

Foram apresentados, ainda, os resultados do programa para um cubo, corpo de

geometria simples e cujas respostas são relatadas na literatura, para um modelo

sintético e para uma feição geológica real, com o objetivo de avaliar as respostas

obtidas. A análise dos resultados apresentados mostrou que é possível identificar as

características das fontes, como as bordas, os cantos, os limites e o centro de massa.

Entretanto, apesar dos avanços experimentados nas tecnologias utilizadas para a

obtenção dos gradientes gravimétricos, a metodologia para sua interpretação ainda não

está bem definida. Assim, são necessários mais estudos e pesquisas para um maior

aprofundamento e precisão na interpretação das componentes do tensor gradiente

gravimétrico, e ferramentas que permitam a modelagem eficiente das respostas

geradas por corpos geológicos podem contribuir bastante neste desenvolvimento.

82

Referências Bibliográficas

AGER, C. A.; LIARD, J. O. Vertical gravity gradient surveys: Field results and

interpretations in British Columbia, Canada. Geophysics, v. 47, n. 6, p. 919-925, 1982.

BELL, R. E. Gravity Gradiometry. Scientific American, 278, n. 6, p. 74-79, 1998.

BELL, R. E.; ANDERSON, R.; PRATSON, L. Gravity gradiometry resurfaces. The

Leading Edge, v. 16, n.1, p. 55-59, 1997.

BIEGERT, E. K. Gravity Gradients in Pre-Stack Depth Migration. In: EGM 2007

International Workshop - Innovation in EM, Grav and Mag Methods: a new Perspective

for Exploration. Capri, Itália, 2007.

BRAGA, M. A. Modelagem Numérica e validação de dados tensoriais de

aerogradiometria gravimétrica 3D – FTG. Dissertação de Mestrado, Instituto de

Geociências, Universidade Federal do Rio de Janeiro. 93 p, 2006.

CADY, J. W. Calculation of gravity and magnetic anomalies of finite-length right

polygonal prisms. Geophysics, v. 45, n. 10, p. 1507-1512, 1980.

COBURN, G. W.; SCHNEIDER, J. Using gravity gradiometry in seismic interpretation in

pre-SDM. A case history in the Green Canyon area, offshore Louisiana, using full

tensor-gradient-enhanced seismic interpretation on a pre-SDM model. World Oil, v.

223, n. 1, p.69-72, 2002.

EVJEN, H. M. The Place of the Vertical Gradient in Gravitational Interpretations.

Geophysics, v. 1, n. 1, p. 127-136, 1936.

83

FAJKLEWICZ, Z. J. Gravity Vertical Gradient Measurements for the Detection of Small

Geologic and Anthropogenic Forms. Geophysics, v. 41, n. 5, p. 1016-1030, 1976.

HAMMER, S.; ANZOLEAGA, R. Exploring for Stratigraphic Traps With Gravity

Gradients. Geophysics, v. 40, n. 2, p. 256-268, 1975.

HOPKINS, J. Gravity Gradiometry – A Rebirth. Canadian Journal of Exploration

Geophysics, v. 11, n. 1, p. 34-37, 1975.

MICKUS, K. L.; HINOJOSA, J. H. The complete gravity gradient tensor derived from the

vertical component of gravity: a Fourier transform technique. Journal of Applied

Geophysics, v. 46, n. 3, p. 159-174, 2001.

MIKHAILOV, V. O.; DIAMENT, M. Some Aspects of Interpretation of Tensor

Gradiometry Data. Izvestiya, Physics of the Solid Earth, v. 42, n. 12, p. 971-978,

2006.

MONTANA, C. J.; MICKUS, K. L.; PEEPLES, W. J. Program to calculate the

gravitational field and gravity gradient tensor resulting from a system of right rectangular

prisms. Computers and Geosciences, v.18, n.5, p. 587-602, 1992.

NAGY, D. The gravitational attraction of a right rectangular prism. Geophysics, v. 31, n.

2, p. 362-371, 1966.

OUALLINE, S. Practical C++ Programming. 2 ed., O’Reilly & Associates, 2003.

PRATSON, L. F. et al. Results from a high-resolution, 3-D marine gravity gradiometry

survey over a salt structure, Mississippi Canyon area, Gulf of Mexico. In: Gibson, R.,

Millegan, P. (Eds), Geological Applications of Gravity and Magnetics: Case Histories.

American Association of Petroleum Geologists, Tulsa, OK, 139-148, 1998.

84

SHUEY, R. T.; PASQUALE, A. S. End corrections in magnetic profile interpretation.

Geophysics, v. 38, n. 3, p. 507-512, 1973.

SLAVEC, G. B.; MANTOVANI, M. S. M.; SHUKOWSKY, W. Estudo Gravimétrico do

Maciço Alcalino de Poços de Caldas. Revista Brasileira de Geociências, v. 34, n. 2, p.

275-280, 2004.

STANLEY, J. M.; GREEN, R. Gravity Gradients and the Interpretation of the Truncated

Plate. Geophysics, v. 41, n. 6, p. 1370-1376, 1976.

VELDHUIZEN, T. L. Scientific Computing: C++ Versus Fortran. Dr. Dobb’s Journal of

Software Tools, v. 22, p. 34-38, 1997.

WRIGHT, R. S.; SWEET, M. OpenGL SuperBible. 2 ed., Waite Group Press, Corte

Madera, California, 2000.

85

APÊNDICE A – Código Fonte do Algoritmo Básico

Este apêndice apresenta o código das funções para o cálculo das componentes do

tensor gradiente gravimétrico e anomalia gravimétrica, a partir dos dados fornecidos

pelo usuário. A componente Gxx é determinada a partir da equação (2.26),

considerando os valores de Gyy e Gzz.

Código para o cálculo da componente Gyx:

#include <math.h>using namespace std;

// Função para calcular a componente Gyxfloat gyx(float x10, float x20, float y10, float y20, float z10, float z20,

float ro){ int i; float yV[6], zV[6], G = 66.73, soma = 0, Gyx, yq[6], zq[6], xq[3], R[4],

Q[4], Qq[4]; float t1x[4], T1X, t2x[4], T2X, t3x[4], T3X; // Determina as coordenadas dos vértices yV[1] = y10; zV[1] = z10; yV[2] = y10; zV[2] = z20; yV[3] = y20; zV[3] = z20; yV[4] = y20; zV[4] = z10; yV[5] = y10; zV[5] = z10; // Loop sobre os lados do prisma for (i = 1; i <= 4; i++){ /* Calcula a componente Gyx para os lados cujo ângulo formado com a

superfície x-y são de 90° - lados cujo vetor n é um vetor na direção y */

if( zV[i+1] - zV[i] != 0 ){

yq[i] = yV[i] * yV[i];yq[i+1] = yV[i+1] * yV[i+1];zq[i] = zV[i] * zV[i];zq[i+1] = zV[i+1] * zV[i+1];xq[1] = x10 * x10;

86

xq[2] = x20 * x20;

R[0] = sqrt(xq[1]+yq[i]+zq[i]);R[1] = sqrt(xq[1]+yq[i+1]+zq[i+1]);R[2] = sqrt(xq[2]+yq[i]+zq[i]);R[3] = sqrt(xq[2]+yq[i+1]+zq[i+1]);

Q[0] = xq[1] + x10*R[0] + yq[i];Q[1] = xq[1] + x10*R[1] + yq[i+1];Q[2] = xq[2] + x20*R[2] + yq[i];Q[3] = xq[2] + x20*R[3] + yq[i+1];

Qq[0] = Q[0] * Q[0];Qq[1] = Q[1] * Q[1];Qq[2] = Q[2] * Q[2];Qq[3] = Q[3] * Q[3];

// Cálculo de T1Xif (zV[i] == 0 && R[0] == 0)

t1x[0] = 1;else

t1x[0] = -(zV[i]/R[0]);

if (zV[i+1] == 0 && R[1] == 0)t1x[1] = 1;

elset1x[1] = -(zV[i+1]/R[1]);

if (zV[i] == 0 && R[2] == 0)

t1x[2] = 1;else

t1x[2] = -(zV[i]/R[2]);

if (zV[i+1] == 0 && R[3] == 0)t1x[3] = 1;

elset1x[3] = -(zV[i+1]/R[3]);

T1X = t1x[3] - t1x[2] - t1x[1] + t1x[0];

// Cálculo de T2Xif ((zV[i] == 0 && R[0] == 0)||((zV[i]+R[0]) == 0))

t2x[0] = -1;else{

if ((zV[i]+R[0]) < 0)t2x[0] = -(xq[1]/(R[0]*(zV[i] + R[0])));

elset2x[0] = -(log(zV[i] + R[0])+(xq[1]/(R[0]*(zV[i] +

R[0]))));}

if ((zV[i+1] == 0 && R[1] == 0)||((zV[i+1]+R[1]) == 0))

t2x[1] = -1;else{

87

if ((zV[i+1]+R[1]) < 0)t2x[1] = -(xq[1]/(R[1]*(zV[i+1] + R[1])));

elset2x[1] = -(log(zV[i+1] + R[1])+ (xq[1]/(R[1]*(zV[i+1]

+ R[1]))));}

if ((zV[i] == 0 && R[2] == 0)||((zV[i]+R[2]) == 0))t2x[2] = -1;

else{

if ((zV[i]+R[2]) < 0)t2x[2] = -(xq[2]/(R[2]*(zV[i] + R[2])));

elset2x[2] = -(log(zV[i] + R[2])+(xq[2]/(R[2]*(zV[i] +

R[2]))));}

if ((zV[i+1] == 0 && R[3] == 0)||((zV[i+1]+R[3]) == 0))t2x[3] = -1;

else{

if ((zV[i+1]+R[3]) < 0)t2x[3] = -(xq[2]/(R[3]*(zV[i+1] + R[3])));

elset2x[3] = -(log(zV[i+1] + R[3])+ (xq[2]/(R[3]*(zV[i+1]

+ R[3]))));}

T2X = t2x[3] - t2x[1] - t2x[2] + t2x[0];

// Cálculo de T3Xif (yV[i] == 0 || zV[i] == 0)

t3x[0] = 0;else

t3x[0] = zV[i]*yq[i]*((2*x10 + (xq[1]/R[0]) + R[0]) /(Qq[0] + zq[i]*yq[i]));

if (yV[i+1] == 0 || zV[i+1] == 0)

t3x[1] = 0;else

t3x[1] = zV[i+1]*yq[i+1]*((2*x10 + (xq[1]/R[1]) + R[1])/(Qq[1] + zq[i+1]*yq[i+1]));

if (yV[i] == 0 || zV[i] == 0)

t3x[2] = 0;else

t3x[2] = zV[i]*yq[i]*((2*x20 + (xq[2]/R[2]) + R[2]) /(Qq[2] + zq[i]*yq[i]));

if (yV[i+1] == 0 || zV[i+1] == 0)

t3x[3] = 0;else

t3x[3] = zV[i+1]*yq[i+1]*((2*x20 + (xq[2]/R[3]) + R[3])/(Qq[3] + zq[i+1]*yq[i+1]));

88

T3X = t3x[3] - t3x[2] - t3x[1] + t3x[0];

soma += -(T1X + T2X + T3X);

} } Gyx = -G*ro*soma; return Gyx; }

Código para o cálculo da componente Gyy:

#include <math.h>using namespace std;

// Função para calcular a componente Gyyfloat gyy(float x10, float x20, float y10, float y20, float z10, float z20,

float ro){ int i; float yV[6], zV[6], G = 66.73, soma = 0, Gyy, yq[6], zq[6], xq[3], R[4],

Q[4], Qq[4]; float t1y[4], T1Y, t2y[4], T2Y, t3y[4], T3Y; // Determina as coordenadas dos vértices yV[1] = y10; zV[1] = z10; yV[2] = y10; zV[2] = z20; yV[3] = y20; zV[3] = z20; yV[4] = y20; zV[4] = z10; yV[5] = y10; zV[5] = z10; // Loop sobre os lados do prisma for (i = 1; i <= 4; i++){ /*Calcula a componente Gyy para os lados cujo ângulo formado com a

superfície x-y são de 90° - lados cujo vetor n é um vetor na direção y*/

if( zV[i+1] - zV[i] != 0 ){

yq[i] = yV[i] * yV[i];yq[i+1] = yV[i+1] * yV[i+1];zq[i] = zV[i] * zV[i];zq[i+1] = zV[i+1] * zV[i+1];xq[1] = x10 * x10;xq[2] = x20 * x20;

89

R[0] = sqrt(xq[1]+yq[i]+zq[i]);R[1] = sqrt(xq[1]+yq[i+1]+zq[i+1]);R[2] = sqrt(xq[2]+yq[i]+zq[i]);R[3] = sqrt(xq[2]+yq[i+1]+zq[i+1]);

Q[0] = xq[1] + x10*R[0] + yq[i];Q[1] = xq[1] + x10*R[1] + yq[i+1];Q[2] = xq[2] + x20*R[2] + yq[i];Q[3] = xq[2] + x20*R[3] + yq[i+1];

Qq[0] = Q[0] * Q[0];Qq[1] = Q[1] * Q[1];Qq[2] = Q[2] * Q[2];Qq[3] = Q[3] * Q[3];

// Cálculo de T1Yif((x10 == 0 && R[0] == 0) || (x10 + R[0]) == 0)

t1y[0] = 0;else

t1y[0] = -(zV[i]*yV[i]/(R[0]*(x10+R[0])));

if((x10 == 0 && R[1] == 0) || (x10 + R[1]) == 0)t1y[1] = 0;

elset1y[1] = -(zV[i+1]*yV[i+1]/(R[1]*(x10+R[1])));

if((x20 == 0 && R[2] == 0) || (x20 + R[2]) == 0)t1y[2] = 0;

elset1y[2] = -(zV[i]*yV[i]/(R[2]*(x20+R[2])));

if((x20 == 0 && R[3] == 0) || (x20 + R[3]) == 0)t1y[3] = 0;

elset1y[3] = -(zV[i+1]*yV[i+1]/(R[3]*(x20+R[3])));

T1Y = t1y[3] - t1y[2] - t1y[1] + t1y[0];

// Cálculo de T2Yif((zV[i] == 0 && R[0] == 0) || (zV[i] + R[0]) == 0)

t2y[0] = 0;else

t2y[0] = -(yV[i]/R[0])*(x10/(zV[i]+R[0]));

if((zV[i+1] == 0 && R[1] == 0) || (zV[i+1] + R[1]) == 0)t2y[1] = 0;

elset2y[1] = -(yV[i+1]/R[1])*(x10/(zV[i+1]+R[1]));

if((zV[i] == 0 && R[2] == 0) || (zV[i] + R[2]) == 0)t2y[2] = 0;

elset2y[2] = -(yV[i]/R[2])*(x20/(zV[i]+R[2]));

if((zV[i+1] == 0 && R[3] == 0) || (zV[i+1] + R[3]) == 0)t2y[3] = 0;

90

elset2y[3] = -(yV[i+1]/R[3])*(x20/(zV[i+1]+R[3]));

T2Y = t2y[3] - t2y[1] - t2y[2] + t2y[0];

// Cálculo de T3Yif(yV[i] == 0 && zV[i] == 0 && Q[0] == 0)

t3y[0] = -(2*atan(1.0));else{

if(yV[i] == 0 && zV[i] == 0)t3y[0] = -(2*atan(1.0)*Q[0]/fabs(Q[0]));

else{if(yV[i] == 0 && Q[0] == 0)

t3y[0] = 0;else{

if(yV[i] == 0)t3y[0] = -(2*atan(1.0)*(Q[0]/zV[i])/

fabs(Q[0]/zV[i]));else{

if(zV[i] == 0)t3y[0] = -(2*atan(1.0)*(Q[0]/

(-yV[i]))/fabs(Q[0]/ (-yV[i])));

elset3y[0] = -(atan(Q[0]/(zV[i]*

(-yV[i])))) -yV[i]*(((zV[i]*x10*(-yq[i])/R[0]) + (zV[i]*(Q[0]-2*yq[i]))))/(Qq[0]+(zq[i]*yq[i])));}

}}

}

if(yV[i+1] == 0 && zV[i+1] == 0 && Q[1] == 0)t3y[1] = -(2*atan(1.0));

else{if(yV[i+1] == 0 && zV[i+1] == 0)

t3y[1] = -(2*atan(1.0)*Q[1]/fabs(Q[1]));else{

if(yV[i+1] == 0 && Q[1] == 0)t3y[1] = 0;

else{if(yV[i+1] == 0)

t3y[1] = -(2*atan(1.0)*(Q[1]/zV[i+1])/fabs(Q[1]/zV[i+1]));

else{if(zV[i+1] == 0)

t3y[1] = -(2*atan(1.0)*(Q[1]/(-yV[i+1]))/fabs(Q[1]/(-yV[i+1])));

elset3y[1] = -(atan(Q[1]/(zV[i+1]*

(-yV[i+1])))) -yV[i+1]*(((zV[i+1]*x10*(-yq[i+1])/R[1]) +(zV[i+1]*(Q[1]-(2*yq[i+1]))))/(Qq[1]+(zq[i+1]*yq[i+1])));

}}

}

91

}

if(yV[i] == 0 && zV[i] == 0 && Q[2] == 0)t3y[2] = -(2*atan(1.0));

else{if(yV[i] == 0 && zV[i] == 0)

t3y[2] = -(2*atan(1.0)*Q[2]/fabs(Q[2]));else{

if(yV[i] == 0 && Q[2] == 0)t3y[2] = 0;

else{if(yV[i] == 0)

t3y[2] = -(2*atan(1.0)*(Q[2]/zV[i])/fabs(Q[2]/zV[i]));

else{if(zV[i] == 0)

t3y[2] = -(2*atan(1.0)*(Q[2]/(-yV[i]))/fabs(Q[2]/(-yV[i])));

elset3y[2] = -(atan(Q[2]/(zV[i]*

(-yV[i])))) -yV[i]*(((zV[i]*x20*(-yq[i])/R[2]) + (zV[i]*(Q[2]-(2*yq[i]))))/(Qq[2]+(zq[i]*yq[i])));

}}

}}

if(yV[i+1] == 0 && zV[i+1] == 0 && Q[3] == 0)t3y[3] = -(2*atan(1.0));

else{if(yV[i+1] == 0 && zV[i+1] == 0)

t3y[3] = -(2*atan(1.0)*Q[3]/fabs(Q[3]));else{

if(yV[i+1] == 0 && Q[3] == 0)t3y[3] = 0;

else{if(yV[i+1] == 0)

t3y[3] = -(2*atan(1.0)*(Q[3]/zV[i+1])/fabs(Q[3]/zV[i+1]));

else{if(zV[i+1] == 0)

t3y[3] = -(2*atan(1.0)*(Q[3]/(-yV[i+1]))/fabs(Q[3]/(-yV[i+1])));

elset3y[3] = -(atan(Q[3]/(zV[i+1]*

(-yV[i+1])))) -yV[i+1]*(((zV[i+1]*x20*(-yq[i+1])/R[3]) + (zV[i+1]*(Q[3]-(2*yq[i+1]))))/(Qq[3]+(zq[i+1]*yq[i+1])));

}}

}}

T3Y = t3y[3] - t3y[2] - t3y[1] + t3y[0];

soma += -(T1Y + T2Y + T3Y); }

92

} Gyy = -G*ro*soma; return Gyy; }

Código para o cálculo da componente Gzx:

#include <math.h>using namespace std;

// Função para calcular a componente Gzxfloat gzx(float x10, float x20, float y10, float y20, float z10, float z20,

float ro){ int i; float yV[6], zV[6], G = 66.73, soma = 0, Gzx, yq[6], zq[6], xq[3], R[4],

Q[4], Qq[4]; float t1x[4], T1X, t2x[4], T2X, t3x[4], T3X; // Determina as coordenadas dos vértices yV[1] = y10; zV[1] = z10; yV[2] = y10; zV[2] = z20; yV[3] = y20; zV[3] = z20; yV[4] = y20; zV[4] = z10; yV[5] = y10; zV[5] = z10; //Loop sobre os lados do prisma for (i = 1; i <= 4; i++){ /*Calcula a componente Gzx para os lados cujo ângulo formado com a

superfície x-y são de 0° - lados cujo vetor n é um vetor na direção z*/

if( yV[i+1] - yV[i] != 0 ){

yq[i] = yV[i] * yV[i];yq[i+1] = yV[i+1] * yV[i+1];zq[i] = zV[i] * zV[i];zq[i+1] = zV[i+1] * zV[i+1];xq[1] = x10 * x10;xq[2] = x20 * x20;

R[0] = sqrt(xq[1]+yq[i]+zq[i]);R[1] = sqrt(xq[1]+yq[i+1]+zq[i+1]);R[2] = sqrt(xq[2]+yq[i]+zq[i]);

93

R[3] = sqrt(xq[2]+yq[i+1]+zq[i+1]);

Q[0] = xq[1] + x10*R[0] + zq[i];Q[1] = xq[1] + x10*R[1] + zq[i+1];Q[2] = xq[2] + x20*R[2] + zq[i];Q[3] = xq[2] + x20*R[3] + zq[i+1];

Qq[0] = Q[0] * Q[0];Qq[1] = Q[1] * Q[1];Qq[2] = Q[2] * Q[2];Qq[3] = Q[3] * Q[3];

// Cálculo de T1Xif (yV[i] == 0 && R[0] == 0)

t1x[0] = 1;else

t1x[0] = -(yV[i]/R[0]);

if (yV[i+1] == 0 && R[1] == 0)t1x[1] = 1;

elset1x[1] = -(yV[i+1]/R[1]);

if (yV[i] == 0 && R[2] == 0) t1x[2] = 1;

elset1x[2] = -(yV[i]/R[2]);

if (yV[i+1] == 0 && R[3] == 0)t1x[3] = 1;

elset1x[3] = -(yV[i+1]/R[3]);

T1X = t1x[3] - t1x[2] - t1x[1] + t1x[0];

//Cálculo de T2Xif ((yV[i] == 0 && R[0] == 0)||((yV[i]+R[0]) == 0))

t2x[0] = -1;else{

if ((yV[i]+R[0]) < 0)t2x[0] = -(xq[1]/(R[0]*(yV[i] + R[0])));

elset2x[0] = -(log(yV[i] + R[0])+(xq[1]/(R[0]*(yV[i] +

R[0]))));}

if ((yV[i+1] == 0 && R[1] == 0)||((yV[i+1]+R[1]) == 0))

t2x[1] = -1;else{

if ((yV[i+1]+R[1]) < 0)t2x[1] = -(xq[1]/(R[1]*(yV[i+1] + R[1])));

elset2x[1] = -(log(yV[i+1] + R[1])+(xq[1]/(R[1]*(yV[i+1] +

R[1]))));

94

}

if ((yV[i] == 0 && R[2] == 0)||((yV[i]+R[2]) == 0))t2x[2] = -1;

else{

if ((yV[i]+R[2]) < 0)t2x[2] = -(xq[2]/(R[2]*(yV[i] + R[2])));

elset2x[2] = -(log(yV[i] + R[2])+(xq[2]/(R[2]*(yV[i] +

R[2]))));}

if ((yV[i+1] == 0 && R[3] == 0)||((yV[i+1]+R[3]) == 0))t2x[3] = -1;

else{

if ((yV[i+1]+R[3]) < 0)t2x[3] = -(xq[2]/(R[3]*(yV[i+1] + R[3])));

elset2x[3] = -(log(yV[i+1] + R[3])+(xq[2]/(R[3]*(yV[i+1] +

R[3]))));}

T2X = t2x[3] - t2x[1] - t2x[2] + t2x[0];

// Cálculo de T3Xif (zV[i] == 0 || yV[i] == 0)

t3x[0] = 0;else

t3x[0] = yV[i]*zq[i]*((2*x10 + (xq[1]/R[0]) + R[0])/(Qq[0] + yq[i]*zq[i]));

if (zV[i+1] == 0 || yV[i+1] == 0)

t3x[1] = 0;else

t3x[1] = yV[i+1]*zq[i+1]*((2*x10 + (xq[1]/R[1]) + R[1])/(Qq[1] + yq[i+1]*zq[i+1]));

if (zV[i] == 0 || yV[i] == 0)

t3x[2] = 0;else

t3x[2] = yV[i]*zq[i]*((2*x20 + (xq[2]/R[2]) + R[2])/(Qq[2] + yq[i]*zq[i]));

if (zV[i+1] == 0 || yV[i+1] == 0)

t3x[3] = 0;else

t3x[3] = yV[i+1]*zq[i+1]*((2*x20 + (xq[2]/R[3]) + R[3])/(Qq[3] + yq[i+1]*zq[i+1]));

T3X = t3x[3] - t3x[2] - t3x[1] + t3x[0];

soma += T1X + T2X + T3X;

95

} } Gzx = -G*ro*soma; return Gzx; }

Código para o cálculo da componente Gzy:

#include <math.h>using namespace std;

// Função para calcular a componente Gzyfloat gzy(float x10, float x20, float y10, float y20, float z10, float z20,

float ro){ int i; float yV[6], zV[6], G = 66.73, soma = 0, Gzy, yq[6], zq[6], xq[3], R[4],

Q[4], Qq[4]; float t1y[4], T1Y, t2y[4], T2Y, t3y[4], T3Y; // Determina as coordenadas dos vértices yV[1] = y10; zV[1] = z10; yV[2] = y10; zV[2] = z20; yV[3] = y20; zV[3] = z20; yV[4] = y20; zV[4] = z10; yV[5] = y10; zV[5] = z10; // Loop sobre os lados do prisma for (i = 1; i <= 4; i++){ /*Calcula a componente Gzy para os lados cujo ângulo formado com a

superfície x-y são de 0° - lados cujo vetor n é um vetor na direção z*/

if( yV[i+1] - yV[i] != 0 ){

yq[i] = yV[i] * yV[i]; yq[i+1] = yV[i+1] * yV[i+1]; zq[i] = zV[i] * zV[i]; zq[i+1] = zV[i+1] * zV[i+1]; xq[1] = x10 * x10; xq[2] = x20 * x20; R[0] = sqrt(xq[1]+yq[i]+zq[i]); R[1] = sqrt(xq[1]+yq[i+1]+zq[i+1]);

96

R[2] = sqrt(xq[2]+yq[i]+zq[i]); R[3] = sqrt(xq[2]+yq[i+1]+zq[i+1]); Q[0] = xq[1] + x10*R[0] + zq[i]; Q[1] = xq[1] + x10*R[1] + zq[i+1]; Q[2] = xq[2] + x20*R[2] + zq[i]; Q[3] = xq[2] + x20*R[3] + zq[i+1]; Qq[0] = Q[0] * Q[0]; Qq[1] = Q[1] * Q[1]; Qq[2] = Q[2] * Q[2]; Qq[3] = Q[3] * Q[3]; // Cálculo de T1Y if(x10 == 0 && R[0] == 0) t1y[0] = -1; else { if ((x10 + R[0]) == 0) t1y[0] = 0; else t1y[0] = -(log(x10 + R[0]) + (yq[i]/(R[0]*(x10 +

R[0])))); } if(x10 == 0 && R[1] == 0) t1y[1] = -1; else { if ((x10 + R[1]) == 0) t1y[1] = 0; else t1y[1] = -(log(x10 + R[1]) + (yq[i+1]/(R[1]*(x10 +

R[1])))); } if(x20 == 0 && R[2] == 0) t1y[2] = -1; else { if ((x20 + R[2]) == 0) t1y[2] = 0; else t1y[2] = -(log(x20 + R[2]) + (yq[i]/(R[2]*(x20 +

R[2])))); } if(x20 == 0 && R[3] == 0) t1y[3] = -1; else { if ((x20 + R[3]) == 0) t1y[3] = 0; else t1y[3] = -(log(x20 + R[3]) + (yq[i+1]/(R[3]*(x20 +

R[3])))); }

97

T1Y = t1y[3] - t1y[2] - t1y[1] + t1y[0]; // Cálculo de T2Y if (yV[i] == 0 && R[0] == 0) t2y[0] = -1; else { if ((yV[i] + R[0]) == 0) t2y[0] = 0; else t2y[0] = -(x10/(yV[i]+R[0]))*(1+(yV[i]/R[0])); } if (yV[i+1] == 0 && R[1] == 0) t2y[1] = -1; else { if ((yV[i+1] + R[1]) == 0) t2y[1] = 0; else t2y[1] = -(x10/(yV[i+1]+R[1]))*(1+(yV[i+1]/R[1])); } if (yV[i] == 0 && R[2] == 0) t2y[2] = -1; else { if ((yV[i] + R[2]) == 0) t2y[2] = 0; else t2y[2] = -(x20/(yV[i]+R[2]))*(1+(yV[i]/R[2])); } if (yV[i+1] == 0 && R[3] == 0) t2y[3] = -1; else { if ((yV[i+1] + R[3]) == 0) t2y[3] = 0; else t2y[3] = -(x20/(yV[i+1]+R[3]))*(1+(yV[i+1]/R[3])); } T2Y = t2y[3] - t2y[1] - t2y[2] + t2y[0]; // Cálculo de T3Y if (zV[i] == 0 && yV[i] == 0 && Q[0] == 0) t3y[0] = 0; else{ if (zV[i] == 0 && yV[i] == 0) t3y[0] = 0; else{ if (zV[i] == 0 && Q[0] == 0) t3y[0] = 0;

98

else{ if (zV[i] == 0) t3y[0] = 0; else{ if (yV[i] == 0) t3y[0] = -(zq[i]/Q[0]); else t3y[0] = zV[i]*((yq[i]*zV[i]*x10/

R[0])-(zV[i]*Q[0]))/(Qq[0]+yq[i]*zq[i]); } } } } if (zV[i+1] == 0 && yV[i+1] == 0 && Q[1] == 0) t3y[1] = 0; else{ if (zV[i+1] == 0 && yV[i+1] == 0) t3y[1] = 0; else{ if (zV[i+1] == 0 && Q[1] == 0) t3y[1] = 0; else{ if (zV[i+1] == 0) t3y[1] = 0; else{ if (yV[i+1] == 0) t3y[1] = -(zq[i+1]/Q[1]); else t3y[1] = zV[i+1]*((yq[i+1]*zV[i+1]*

x10/R[1])-(zV[i+1]*Q[1]))/(Qq[1]+yq[i+1]*zq[i+1]);

} } } } if (zV[i] == 0 && yV[i] == 0 && Q[2] == 0) t3y[2] = 0; else{ if (zV[i] == 0 && yV[i] == 0) t3y[2] = 0; else{ if (zV[i] == 0 && Q[2] == 0) t3y[2] = 0; else{ if (zV[i] == 0) t3y[2] = 0; else{ if (yV[i] == 0) t3y[2] = -(zq[i]/Q[2]); else t3y[2] = zV[i]*((yq[i]*zV[i]*x20/

R[2])-(zV[i]*Q[2]))/(Qq[2]+yq[i]*zq[i]); } } }

99

} if (zV[i+1] == 0 && yV[i+1] == 0 && Q[3] == 0) t3y[3] = 0; else{ if (zV[i+1] == 0 && yV[i+1] == 0) t3y[3] = 0; else{ if (zV[i+1] == 0 && Q[3] == 0) t3y[3] = 0; else{ if (zV[i+1] == 0) t3y[3] = 0; else{ if (yV[i+1] == 0) t3y[3] = -(zq[i+1]/Q[3]); else t3y[3] = zV[i+1]*((yq[i+1]*zV[i+1]*

x20/R[3])-(zV[i+1]*Q[3]))/(Qq[3]+yq[i+1]*zq[i+1]);

} } } } T3Y = t3y[3] - t3y[2] - t3y[1] + t3y[0]; soma += T1Y + T2Y + T3Y;

} } Gzy = -G*ro*soma; return Gzy;

}

Código para o cálculo da componente Gzz:

#include <math.h>using namespace std;

// Função para calcular a componente Gzzfloat gzz(float x10, float x20, float y10, float y20, float z10, float z20,

float ro){ int i; float yV[6], zV[6], G = 66.73, soma = 0, Gzz, yq[6], zq[6], xq[3], R[4],

Q[4], Qq[4]; float t1z[4], T1Z, t2z[4], T2Z, t3z[4], T3Z;

100

// Determina as coordenadas dos vértices yV[1] = y10; zV[1] = z10; yV[2] = y10; zV[2] = z20; yV[3] = y20; zV[3] = z20; yV[4] = y20; zV[4] = z10; yV[5] = y10; zV[5] = z10; // Loop sobre os lados do prisma for (i = 1; i <= 4; i++){ /* Calcula a componente Gzz para os lados cujo ângulo formado com a

superfície x-y são de 0° - lados cujo vetor n é um vetor na direção z*/

if( yV[i+1] - yV[i] != 0 ){ yq[i] = yV[i] * yV[i]; yq[i+1] = yV[i+1] * yV[i+1]; zq[i] = zV[i] * zV[i]; zq[i+1] = zV[i+1] * zV[i+1]; xq[1] = x10 * x10; xq[2] = x20 * x20; R[0] = sqrt(xq[1]+yq[i]+zq[i]); R[1] = sqrt(xq[1]+yq[i+1]+zq[i+1]); R[2] = sqrt(xq[2]+yq[i]+zq[i]); R[3] = sqrt(xq[2]+yq[i+1]+zq[i+1]); Q[0] = xq[1] + x10*R[0] + zq[i]; Q[1] = xq[1] + x10*R[1] + zq[i+1]; Q[2] = xq[2] + x20*R[2] + zq[i]; Q[3] = xq[2] + x20*R[3] + zq[i+1]; Qq[0] = Q[0] * Q[0]; Qq[1] = Q[1] * Q[1]; Qq[2] = Q[2] * Q[2]; Qq[3] = Q[3] * Q[3]; // Cálculo de T1Z if((x10 == 0 && R[0] == 0) || (x10+R[0]) == 0) t1z[0] = 0; else t1z[0] = -(yV[i]*zV[i]/(R[0]*(x10+R[0]))); if((x10 == 0 && R[1] == 0) || (x10+R[1]) == 0) t1z[1] = 0; else t1z[1] = -(yV[i+1]*zV[i+1]/(R[1]*(x10+R[1]))); if((x20 == 0 && R[2] == 0) || (x20+R[2]) == 0) t1z[2] = 0; else t1z[2] = -(yV[i]*zV[i]/(R[2]*(x20+R[2])));

101

if((x20 == 0 && R[3] == 0) || (x20+R[3]) == 0) t1z[3] = 0; else t1z[3] = -(yV[i+1]*zV[i+1]/(R[3]*(x20+R[3]))); T1Z = t1z[3] - t1z[2] - t1z[1] + t1z[0];

// Cálculo de T2Z if((yV[i] == 0 && R[0] == 0) || (yV[i]+R[0]) == 0) t2z[0] = 0; else t2z[0] = -(zV[i]/R[0])*(x10/(yV[i]+R[0])); if((yV[i+1] == 0 && R[1] == 0) || (yV[i+1]+R[1]) == 0) t2z[1] = 0; else t2z[1] = -(zV[i+1]/R[1])*(x10/(yV[i+1]+R[1])); if((yV[i] == 0 && R[2] == 0) || (yV[i]+R[2]) == 0) t2z[2] = 0; else t2z[2] = -(zV[i]/R[2])*(x20/(yV[i]+R[2])); if((yV[i+1] == 0 && R[3] == 0) || (yV[i+1]+R[3]) == 0) t2z[3] = 0; else t2z[3] = -(zV[i+1]/R[3])*(x20/(yV[i+1]+R[3])); T2Z = t2z[3] - t2z[1] - t2z[2] + t2z[0];

// Cálculo de T3Z if(zV[i] == 0 && yV[i] == 0 && Q[0] == 0) t3z[0] = 2*atan(1.0); else{ if(zV[i] == 0 && yV[i] == 0) t3z[0] = 2*atan(1.0)*Q[0]/fabs(Q[0]); else{ if(zV[i] == 0 && Q[0] == 0) t3z[0] = 0; else{ if(zV[i] == 0) t3z[0] = 2*atan(1.0)*(Q[0]/yV[i])/

fabs(Q[0]/yV[i]); else{ if(yV[i] == 0) t3z[0] = 2*atan(1.0)*(Q[0]/zV[i])/

fabs(Q[0]/zV[i]); else t3z[0] = atan(Q[0]/(yV[i]*zV[i])) +

zV[i]*(((yV[i]*zq[i]*x10/R[0])-yV[i]*(Q[0]-(2.0*zq[i])))/(Qq[0]+yq[i]*zq[i]));

} }

102

} } if(zV[i+1] == 0 && yV[i+1] == 0 && Q[1] == 0) t3z[1] = 2*atan(1.0); else{ if(zV[i+1] == 0 && yV[i+1] == 0) t3z[1] = 2*atan(1.0)*Q[1]/fabs(Q[1]); else{ if(zV[i+1] == 0 && Q[1] == 0) t3z[1] = 0; else{ if(zV[i+1] == 0) t3z[1] = 2*atan(1.0)*(Q[1]/yV[i+1])/

fabs(Q[1]/yV[i+1]); else{ if(yV[i+1] == 0) t3z[1] = 2*atan(1.0)*(Q[1]/zV[i+1])/

fabs(Q[1]/zV[i+1]); else

t3z[1] = atan(Q[1]/(yV[i+1]*zV[i+1])) + zV[i+1]*(((yV[i+1]*zq[i+1]*x10/R[1])-yV[i+1]*(Q[1]-(2.0*zq[i+1])))/(Qq[1]+yq[i+1]*zq[i+1]));

} } } } if(zV[i] == 0 && yV[i] == 0 && Q[2] == 0) t3z[2] = 2*atan(1.0); else{ if(zV[i] == 0 && yV[i] == 0) t3z[2] = 2*atan(1.0)*Q[2]/fabs(Q[2]); else{ if(zV[i] == 0 && Q[2] == 0) t3z[2] = 0; else{ if(zV[i] == 0) t3z[2] = 2*atan(1.0)*(Q[2]/yV[i])/

fabs(Q[2]/yV[i]); else{ if(yV[i] == 0) t3z[2] = 2*atan(1.0)*(Q[2]/zV[i])/

fabs(Q[2]/zV[i]); else t3z[2] = atan(Q[2]/(yV[i]*zV[i])) +

zV[i]*(((yV[i]*zq[i]*x20/R[2])-yV[i]*(Q[2]-(2.0*zq[i])))/(Qq[2]+yq[i]*zq[i]));

} } } } if(zV[i+1] == 0 && yV[i+1] == 0 && Q[3] == 0) t3z[3] = 2*atan(1.0);

103

else{ if(zV[i+1] == 0 && yV[i+1] == 0) t3z[3] = 2*atan(1.0)*Q[3]/fabs(Q[3]); else{ if(zV[i+1] == 0 && Q[3] == 0) t3z[3] = 0; else{ if(zV[i+1] == 0) t3z[3] = 2*atan(1.0)*(Q[3]/yV[i+1])/

fabs(Q[3]/yV[i+1]); else{ if(yV[i+1] == 0) t3z[3] = 2*atan(1.0)*(Q[3]/zV[i+1])/

fabs(Q[3]/zV[i+1]); else t3z[3] = atan(Q[3]/(yV[i+1]*zV[i+1]))

+ zV[i+1]*(((yV[i+1]*zq[i+1]*x20/R[3])-yV[i+1]*(Q[3]-(2.0*zq[i+1])))/(Qq[3]+yq[i+1]*zq[i+1]));

} } } }

T3Z = t3z[3] - t3z[1] - t3z[2] + t3z[0]; soma += T1Z + T2Z + T3Z;

} } Gzz = -G*ro*soma; return Gzz;

}

Código para o cálculo da anomalia gravimétrica, Gz:

#include <math.h>using namespace std;

// Função para calcular a anomalia gravimétrica (Gz)float gz(float x10, float x20, float y10, float y20, float z10, float z20,

float ro){ int i; float yV[6], zV[6], G = 6.67, soma = 0, Gz, yq[6], zq[6], xq[3], R[4], Q[4],

Qq[4]; float t1[4], T1, t2[4], T2, t3[4], T3; // Determina as coordenadas dos vértices

104

yV[1] = y10; zV[1] = z10; yV[2] = y10; zV[2] = z20; yV[3] = y20; zV[3] = z20; yV[4] = y20; zV[4] = z10; yV[5] = y10; zV[5] = z10; // Loop sobre os lados do prisma for (i = 1; i <= 4; i++){ /* Calcula a componente Gz para os lados cujo ângulo formado com a

superfície x-y são de 0° - lados cujo vetor n é um vetor na direção z*/

if( yV[i+1] - yV[i] != 0 ){

yq[i] = yV[i] * yV[i];yq[i+1] = yV[i+1] * yV[i+1];zq[i] = zV[i] * zV[i];zq[i+1] = zV[i+1] * zV[i+1];xq[1] = x10 * x10;xq[2] = x20 * x20;

R[0] = sqrt(xq[1]+yq[i]+zq[i]);R[1] = sqrt(xq[1]+yq[i+1]+zq[i+1]);R[2] = sqrt(xq[2]+yq[i]+zq[i]);R[3] = sqrt(xq[2]+yq[i+1]+zq[i+1]);

Q[0] = xq[1] + x10*R[0] + zq[i];Q[1] = xq[1] + x10*R[1] + zq[i+1];Q[2] = xq[2] + x20*R[2] + zq[i];Q[3] = xq[2] + x20*R[3] + zq[i+1];

Qq[0] = Q[0] * Q[0];Qq[1] = Q[1] * Q[1];Qq[2] = Q[2] * Q[2];Qq[3] = Q[3] * Q[3];

// Cálculo de T1if((x10 == 0 && R[0] == 0) || (x10+R[0]) == 0)

t1[0] = 0;else

t1[0] = yV[i] * log(x10 + R[0]);

if((x10 == 0 && R[1] == 0) || (x10+R[1]) == 0)t1[1] = 0;

elset1[1] = yV[i+1] * log(x10 + R[1]);

if((x20 == 0 && R[2] == 0) || (x20+R[2]) == 0)t1[2] = 0;

elset1[2] = yV[i] * log(x20 + R[2]);

105

if((x20 == 0 && R[3] == 0) || (x20+R[3]) == 0)t1[3] = 0;

elset1[3] = yV[i+1] * log(x20 + R[3]);

T1 = t1[3] - t1[2] - t1[1] + t1[0];// Cálculo de T2if((yV[i] == 0 && R[0] == 0) || (yV[i]+R[0]) == 0)

t2[0] = 0;else

t2[0] = x10 * log(yV[i] + R[0]);

if((yV[i+1] == 0 && R[1] == 0) || (yV[i+1]+R[1]) == 0)t2[1] = 0;

elset2[1] = x10 * log(yV[i+1] + R[1]);

if((yV[i] == 0 && R[2] == 0) || (yV[i]+R[2]) == 0)t2[2] = 0;

elset2[2] = x20 * log(yV[i] + R[2]);

if((yV[i+1] == 0 && R[3] == 0) || (yV[i+1]+R[3]) == 0)t2[3] = 0;

elset2[3] = x20 * log(yV[i+1] + R[3]);

T2 = t2[3] - t2[1] - t2[2] + t2[0];

// Cálculo de T3if(zV[i] == 0)

t3[0] = 0;else{

if(yV[i] == 0 ){if((Q[0]/zV[i]) == 0)

t3[0] = -zV[i]*2*atan(1.0);else

t3[0] = -zV[i]*2*atan(1.0)*(Q[0]/zV[i])/fabs(Q[0]/zV[i]);

}else

t3[0] = -zV[i] * atan(Q[0]/(yV[i]*zV[i]));}

if(zV[i+1] == 0)t3[1] = 0;

else{if(yV[i+1] == 0 ){

if((Q[1]/zV[i+1]) == 0)t3[1] = -zV[i+1]*2*atan(1.0);

elset3[1] = -zV[i+1]*2*atan(1.0)*(Q[1]/zV[i+1])/

fabs(Q[1]/zV[i+1]);}else

t3[1] = -zV[i+1] * atan(Q[1]/(yV[i+1]*zV[i+1]));

106

}

if(zV[i] == 0)t3[2] = 0;

else{if(yV[i] == 0 ){

if((Q[2]/zV[i]) == 0)t3[2] = -zV[i]*2*atan(1.0);

elset3[2] = -zV[i]*2*atan(1.0)*(Q[2]/zV[i])/

fabs(Q[2]/zV[i]);}else

t3[2] = -zV[i] * atan(Q[2]/(yV[i]*zV[i]));}

if(zV[i+1] == 0)t3[3] = 0;

else{if(yV[i+1] == 0 ){

if((Q[3]/zV[i+1]) == 0)t3[3] = -zV[i+1]*2*atan(1.0);

elset3[3] = -zV[i+1]*2*atan(1.0)*(Q[3]/zV[i+1])/

fabs(Q[3]/zV[i+1]);}else

t3[3] = -zV[i+1] * atan(Q[3]/(yV[i+1]*zV[i+1]));}

T3 = t3[3] - t3[2] - t3[1] + t3[0];

soma += T1 + T2 + T3;

} } Gz = -G*ro*soma; return Gz; }