Universidade de São Paulo Instituto de Astronomia ... · 3.9 Tela para criação e visualização...
Transcript of Universidade de São Paulo Instituto de Astronomia ... · 3.9 Tela para criação e visualização...
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
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.
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; }