{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "**Course website**: http://www.leouieda.com/geofisica1\n", "\n", "**Note**: This notebook is part of the course \"Geofísica 1\" of Geology program of the \n", "[Universidade do Estado do Rio de Janeiro](http://www.uerj.br/). \n", "All content can be freely used and adapted under the terms of the \n", "[Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/).\n", "\n", "![Creative Commons License](https://i.creativecommons.org/l/by/4.0/88x31.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Esse documento que você está usando é um [Jupyter notebook](http://jupyter.org/). É um documento interativo que mistura texto (como esse), código (como abaixo), e o resultado de executar o código (números, texto, figuras, videos, etc)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Prática 2 - Gravimetria - A Terra Normal e o distúrbio da gravidade" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objetivos\n", "\n", "* Aprender a calcular a gravidade da Terra Normal e o distúrbio da gravidade\n", "* Gerar mapas do distúrbio para o mundo todo\n", "* Entender a relação entre o distúrbio e a isostasia\n", "* Observar o estado de equilíbrio isostático em diferentes regiões do planeta" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Instruções\n", "\n", "O notebook te fornecerá exemplos interativos que trabalham os temas abordados no questionário. Utilize esses exemplos para responder as perguntas.\n", "\n", "As células com números ao lado, como `In [1]:`, são código [Python](http://python.org/). Algumas dessas células não produzem resultado e servem de preparação para os exemplos interativos. Outras, produzem gráficos interativos. **Você deve executar todas as células, uma de cada vez**, mesmo as que não produzem gráficos.\n", "\n", "Para executar uma célula, clique em cima dela e aperte `Shift + Enter`. O foco (contorno verde ou cinza em torno da célula) deverá passar para a célula abaixo. Para rodá-la, aperte `Shift + Enter` novamente e assim por diante. Você pode executar células de texto que não acontecerá nada." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparação\n", "\n", "Exectute as células abaixo para carregar as componentes necessárias para nossa prática. Vamos utilizar várias *bibliotecas*, inclusive uma de geofísica chamada [Fatiando a Terra](http://www.fatiando.org)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "from __future__ import division\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.basemap import Basemap\n", "import ipywidgets as widgets\n", "from IPython.display import display\n", "import seaborn\n", "import fatiando\n", "from icgem import load_icgem_gdf" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "print(\"Usando a versão do Fatiando: {}\".format(fatiando.__version__))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A Terra Normal" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"Terra Normal\" é o nome que damos ao elipsóide de referência utilizado para o cálculo de anomalias da gravidade. Um elipsóide geralmente utilizado é o [WGS84](http://en.wikipedia.org/wiki/World_Geodetic_System). \n", "\n", "Existem fórmulas para calcular a gravidade (lembre-se que gravidade = gravitação + centrífuga) de um elipsóide em qualquer ponto fora dele. Porém, essas fórmulas são mais complicadas do que queremos para essa aula. Uma alternativa é utilizar a fórmula de Somigliana:\n", "\n", "$$\n", "\\gamma(\\varphi) = \\frac{a \\gamma_a \\cos^2 \\varphi + b \\gamma_b \\sin^2 \\varphi}{\\sqrt{a^2 \\cos^2 \\varphi + b^2 \\sin^2 \\varphi}}\n", "$$\n", "\n", "$\\gamma$ é a gravidade do elipsóide calculada na latitude $\\varphi$ e **sobre a superfície do elipsóide** (ou seja, altitude zero).\n", "$a$ e $b$ são os eixos maior e menor do elipsóide, $\\gamma_a$ e $\\gamma_b$ são a gravidade do elipsóide no equador e nos polos. Os valores de $a$, $b$, $\\gamma_a$ e $\\gamma_b$ são tabelados para cada elipsóide. Os valores abaixo são referentes ao WGS84:\n", "\n", "\n", "\n", "\n", "\n", "\n", "
a 6378137 metros
b 6356752.3142 metros
$\\gamma_a$ 9.7803253359 m/s²
$\\gamma_b$ 9.8321849378 m/s²
\n", "\n", "Os valores foram retirados do livro:\n", "\n", "> Hofmann-Wellenhof, B., and H. Moritz (2006), Physical Geodesy, 2nd, corr. ed. 2006 edition., Springer, Wien ; New York." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Calculando $\\gamma$ em uma planilha" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hoje vamos calcular o valor de $gamma$ utilizando a fórmula de Somigliana em uma planilha. Vamos utilizar o programa LibreOffice Calc (uma versão livre do Microsoft Excel).\n", "\n", "![Screnshot do Calc](https://raw.githubusercontent.com/leouieda/geofisica1/master/images/calc-screen-shot.jpg)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Instruções\n", "\n", "**Primeiro**: vocês vão precisar abrir o arquivo com os dados utilizados na [prática passada](http://nbviewer.ipython.org/github/leouieda/geofisica1/blob/master/praticas/1-mapas-interpolacao-gravidade.ipynb) no Calc. Esses arquivos estão em um arquivo de texto chamado `eigen-6c3stat-0_5-mundo.gdf` na [pasta `data`](https://github.com/leouieda/geofisica1/tree/master/data) (peça ajuda para localizar o arquivo no seu computador). **Vá até a pasta e abra esse arquivo e examine seu conteúdo**.\n", "\n", "Para abrir o arquivo no Calc, selecione File > Open e navegue até o arquivo. Abrirá uma janela de configuração de importação de texto (Text Import). Nessa janela:\n", "\n", "* Informem que os valores no arquivo estão separados por espaços\n", "* Escolha a opção \"Merge delimiters\"\n", "* Verifique que os valores estão separados corretamente\n", "* Dê \"OK\" para abrir os dados\n", "\n", "**Segundo**: Não vamos editar os dados nesse arquivo diretamente para não perder os dados originais.\n", "\n", "* Salve uma cópia (*Save as*) dos dados abertos como uma planilha do LibreOffice (formato ODS)\n", "* Salve-a na pasta `data` com o nome `disturbio-mundo-{nome do aluno}.ods`, substituindo seu nome (**sem espaços e sem acentos**)\n", "* Se ainda estiver aberta, feche a planilha com os dados originais para não ter problemas\n", "* Coloque o nome de cada coluna acima dos valores\n", "* Apague todas as colunas vazias a esquerda dos dados\n", "* Apague todas as linhas que não são os dados mesmo (as 4 colunas de lon, lat, altitude e gravidade)\n", "\n", "**Terceiro**: Calcule os valores de $\\gamma$ para cada ponto do dado. \n", "\n", "* Para calcular o seno do valor em uma célula (por exemplo, a A2), utilize a fórmula `=sin(A2)`\n", "* O seno e o cosseno esperam valores em **radianos**. A latitude na planilha está em graus.\n", "* Para calcular a raiz quadrada utilize a função: `=sqrt(A2)` por exemplo\n", "* Cuidado com a ordem dos parênteses: `=A2 + B2/C2` é diferente de `=(A2 + B2)/C2`\n", "* Utilizando os valores da tabela acima nos dará $\\gamma$ em m/s². Precisamos dos valores em **mGal** = 100000 m/s²\n", "\n", "**Quarto**: Salve uma cópia da sua planilha no formato Comma Separated Values (`.csv`) para podermos carregá-los no notebook.\n", "\n", "**Dicas**: \n", "\n", "* Utilize quantas colunas quiser para guardar valores intermediários. Porém, garanta que a **última coluna são os valores de $\\gamma$**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Carregando os dados e fazendo um mapa" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Depois de calcular os valores acima, precisamos carregá-los aqui no notebook para gerarmos os mapas.\n", "\n", "Primeiro, coloque o nome do seu arquivo `.csv` abaixo e execute a célula." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "arquivo_dados = '../data/disturbio-mundo-{nome do aluno}.csv'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Agora, execute as células abaixo para carregar os dados e gerar um mapa com os valores que você calculou." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "lon, lat, gamma = np.loadtxt(arquivo_dados, delimiter=',', unpack=True, skiprows=1, usecols=[0, 1, -1])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "bm = Basemap(projection='moll', lon_0=0, resolution='c')\n", "x, y = bm(lon, lat)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plt.figure(figsize=(18, 10))\n", "tmp = bm.contourf(x, y, gamma, 100, tri=True, cmap='Reds')\n", "plt.colorbar(orientation='horizontal', pad=0.01, aspect=50, shrink=0.5).set_label('mGal')\n", "plt.title(r\"Gravidade da Terra Normal ($\\gamma$)\", fontsize=16)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cáculo da Terra Normal no ponto de observação ($\\gamma_P$)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A fórmula de Somgliana nos dá a gravidade da Terra Normal calculada sobre o elipsóide. Nós precisamos de $\\gamma$ calculado no ponto onde medimos a gravidade (P) para calcular o distúrbio. Para obter $\\gamma_P$, nós podemos utilizar a **correção de ar-livre**. Essa correção nos dá uma approximação de $\\gamma_P$:\n", "\n", "$$ \\gamma_P \\approx \\gamma - 0.3086 H $$\n", "\n", "em que $H$ é a altitude em relação ao elipsóide (altitude geométrica) em **metros**. Lembrando que a correção é feita em **mGal**.\n", "\n", "**Calcule $\\gamma_P$ em sua planilha** (a mesma que antes). Certifique-se que os valores de $\\gamma_P$ estão na última coluna. Após calcular, **salve novamente como CVS** (sobreescreva o arquivo anterior).\n", "\n", "Rode as células abaixo para carregar os dados de $\\gamma_P$ e gerar um mapa." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "gamma_p = np.loadtxt(arquivo_dados, delimiter=',', unpack=True, skiprows=1, usecols=[-1])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plt.figure(figsize=(18, 10))\n", "tmp = bm.contourf(x, y, gamma_p, 100, tri=True, cmap='Reds')\n", "plt.colorbar(orientation='horizontal', pad=0.01, aspect=50, shrink=0.5).set_label('mGal')\n", "plt.title(r\"Gravidade da Terra Normal em P ($\\gamma_P$)\", fontsize=16)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Distúrbio da gravidade" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O distúrbio da gravidade é definido como:\n", "\n", "$$ \\delta = g_P - \\gamma_P$$\n", "\n", "em que $g_P$ é a gravidade medida no ponto P.\n", "\n", "**Calcule o distúrbio da gravidade em sua planilha**. Coloque os valores do distúrbio na **última coluna** e **salve como `.csv`**.\n", "\n", "Rode as células abaixo para carregar os valores calculados e gerar o mapa." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "disturbio = np.loadtxt(arquivo_dados, delimiter=',', unpack=True, skiprows=1, usecols=[-1])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def varia_escala(escala_de_cor):\n", " plt.figure(figsize=(18, 10))\n", " ranges = np.abs([disturbio.min(), disturbio.max()]).max()\n", " tmp = bm.contourf(x, y, disturbio, 100, tri=True, cmap=escala_de_cor, vmin=-ranges, vmax=ranges)\n", " plt.colorbar(orientation='horizontal', pad=0.01, aspect=50, shrink=0.5).set_label('mGal')\n", " plt.title(u\"Distúrbio da gravidade (escala de cor '{}')\".format(escala_de_cor), fontsize=16)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "escalas = 'Reds Blues Greys YlOrBr RdBu_r BrBG PRGn Dark2 jet ocean rainbow gnuplot'.split()\n", "w = widgets.interactive(varia_escala, escala_de_cor=escalas)\n", "display(w)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[]()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }