GrADS

O Grid Analysis and Display System (GrADS) é uma ferramenta interativa usada para facilitar o acesso, manipulação e visualização de dados de Ciências da Terra. Suporta dados no formato GRIB, NetCDF, HDF e BUFR. Ele considera um ambiente de cinco dimensões: longitude (lon), latitude (lat), nível vertical (lev), tempo (time) e uma variável meteorológica. Os conjuntos de dados estão relacionados com um arquivo de descrição.

Instalação

O GrADS pode ser instalado através do repositório no Debian (comando “sudo apt-get install grads”) ou baixando e compilando seu código fonte baixado diretamente no site do OpenGrADS – clique na versão, sistema operacional e arquitetura (32 ou 64 bits). O Projeto OpenGrADS procura desenvolver interfaces avançadas e extensões baseadas no motor principal do GrADS, desenvolvido pelo COLA (Center for Ocean-Land-Atmosphere Studies).

Veja esse exemplo para download da versão 2.0.2 (tive problemas com a 2.1.0) para Linux 64 bits – complementando a instalação do WRF do outro post. Depois, o conteúdo da pasta “Contents” deve ser copiado para a pasta de destino:

mkdir /home/operacao/WRF/LIBRARIES/grads
cd /home/operacao/WRF/Downloads/
wget http://downloads.sourceforge.net/project/opengrads/grads2/2.0.2.oga.1/Linux/grads-2.0.2.oga.1-bundle-x86_64-unknown-linux-gnu.tar.gz
tar -vzxf grads-2.0.2.oga.1-bundle-x86_64-unknown-linux-gnu.tar.gz
cp -r grads-2.0.2.oga.1/Contents/* /home/operacao/WRF/LIBRARIES/grads

Agora edite o arquivo “.bashrc”, localizado no “Home” do seu usuário, para incluir o caminho do arquivo executável (grads) e do diret´orio contendo mapas, fontes e outros conjuntos de dados (“Resources/SupportData”):

# Opengrads
export PATH=/home/operacao/WRF/LIBRARIES/grads:$PATH
export GADDIR=/home/operacao/WRF/LIBRARIES/grads/Resources/SupportData
export GASCRP=$GADDIR

Abra um novo terminal (para atualizar as variáveis de ambiente) e execute o comando “grads” para abrir o programa (em versões mais antigas que a 2.0.x, poderia ser o comando gradsnc ou outro, dependendo do formato do arquivo de dados). Se o sistema operacional não encontrá-lo, crie um link para esse arquivo em “/usr/local/bin”.

Se reclamar que está faltando alguma biblioteca compartilhada (“error while loading shared libraries”) e você não a tenha, copie o arquivo correspondente da pasta “libs” para a pasta “gex”. Por exemplo:

cd /home/operacao/WRF/LIBRARIES/grads/Linux/Versions/2.0.2.oga.1/x86_64/
cp libs/libXaw.so.7 gex
# Outra opção usando link de uma lib já instalada
#cd /usr/lib/x86_64-linux-gnu
#sudo ln -s /home/operacao/WRF/LIBRARIES/grads/Linux/Versions/2.0.2.oga.1/x86_64/libs/libXaw.so.7 .

Outra opção é instalar o GrADS do COLA. Você deve baixar o arquivo, extrair seu conteúdo com os arquivos compilados e copiá-los, juntamente com as bibliotecas, para os respectivos diretórios padrão:

# Se o seu computador não tem OpenSSL instalado, usar link abaixo
wget ftp://cola.gmu.edu/grads/2.2/grads-2.2.0-bin-i686-pc-linux-noSSL-gnu.tar.gz
tar -xzvf grads-2.2.0-bin-i686-pc-linux-noSSL-gnu.tar.gz
sudo mkdir -p /usr/local/bin/grads /usr/local/lib/grads
cd grads-2.2.0
sudo cp bin/* /usr/local/bin/grads
sudo cp lib/* /usr/local/lib/grads

Você também deve baixar um arquivo suplementar contendo fontes e anexos, depois copiando para o lugar padrão:

wget ftp://cola.gmu.edu/grads/data2.tar.gz
sudo tar -xzvf data2.tar.gz -C /usr/local/lib/grads

Para começar uma sessão do GrADS, execute o arquivo com seu caminho completo (considerando que você não esteja na pasta do executável nem tenha definido um PATH no “.bashrc”): /usr/local/bin/grads/grads.

Caso dê um erro reclamando a falta da “User-Defined Plug-in Table (UDPT)“, crie o arquivo “/usr/local/lib/grads/udpt” e inclua a tabela do link. Além disso, inclua as seguintes variáveis de ambiente:

# GrADS
export GAUDPT="/usr/local/lib/grads"
export GADDIR="/usr/local/lib/grads"
export PATH=/usr/local/lib/grads:$PATH

Mesmo depois disso, ainda tive o erro “GX Package Error: dlopen failed to get a handle on gxprint plug-in named “Cairo” libcairo.so.2: cannot open shared object file: No such file or directory”. Por isso, opte pelo opengrads, muito mais fácil.

Uso

O site do GrADS disponibiliza um tutorial para treinar. Seu arquivo de exemplo pode ser baixado e extraído através dos seguintes comandos:

mkdir example
wget ftp://cola.gmu.edu/grads/example.tar.gz
tar -xzvf example.tar.gz -C example

O diretório “example” deve conter um arquivo descritor (model.ctl), um binário de dados (model.dat) e o conteúdo do tutorial. Dentro dessa pasta, execute o programa do GrADS (grads -l) e siga o roteiro do tutorial. Será aberta uma janela onde serão visualizados os mapas e gráficos gerados a partir do terminal do GrADS (por isso, se estiver em um computador remoto acessado via SSH, use o parâmetro “-X” ao conectar). Para sair, deve ser executado o comando “quit”.

O ambiente dimensionado é controlado com o comando set. Quando todas as dimensões estão fixas, está se referindo a um único ponto de grade dos dados; quando uma dimensão está variante, é um conjunto unidimensional de dados, e assim por diante. O comando display (d) exibe os dados de uma determinada variável com respeito ao atual ambiente dimensionado. Antes de dimensioná-lo, é importante limpar a janela gráfica através do comando clean. Os comandos “set mpdset hires” e “draw map” desenham o mapa de continentes e contorno de países.

Exemplo de mapa feito no GrADS com rodada de previsão numérica de tempo utilizando WRF

O arquivo descritor do GrADS contém informações do arquivo de dados que está sendo descrito, especificado internamente na variável DSET – se o nome do arquivo de dados começar com um acento circunflexo ^, então o conjunto de dados e o arquivo descritor estão no mesmo diretório. A entrada DTYPE especifica o tipo de dado: grib, hdfsds, netcdf, ou station -se não for informado assume-se que o tipo de dado é binário em ponto de grade. Veja mais sobre os formatos de arquivos de dados no post sobre dados de reanálise.

Ainda sobre o arquivo descritor, a entrada UNDEF especifica os valores de dados indefinidos ou ausentes. XDEF, YDEF, ZDEF e TDEF definem os valores dos pontos de grade para a dimensão X (longitude), Y (latitude), Z (altitude) e tempo (em número de passos). O primeiro argumento define o número de passos nessa dimensão e o segundo é o mapeamento, que define o método pelo qual as variáveis são designadas para os pontos de grade: linear (com os argumentos adicionais de início e incremento) ou níveis de pressão (com o argumento adicional que especifica a variável para cada ponto de grade). Por fim, segue uma listagem de n variáveis e suas características, finalizada com “endvars”.

As variáveis “rc” e “result” de script estão pré-definidas e seus valores mudam a cada execução dos comandos GrADS do script (na mesma linha ou da linha anterior). Uma variável global tem seu nome começando com um underscore (_) e mantem seu valor em todo o arquivo de script.

Exemplos

O GrADS possui uma linguagem de scripts acionada pelo comando run:

grads -blc run script.gs <argumentos>

A opção “-b” executa o grads no modo lote (ou seja, nenhuma janela de saída gráfica é aberta), “-l” executa o grads no modo landscape (paisagem) e “-c” executa o comando fornecido como o primeiro comando assim que o GrADS for iniciado. Para sair do GrADS, deve ser executado o comando “quit”. Comentários são feitos com a linha iniciando com cerquilha (#) ou asterisco (*).

O script a seguir recebe como argumentos a latitude, longitude, nome do local, data inicial e data final para extrair os dados de um arquivo binário dessa localidade e imprimir os valores de temperatura mínima, máxima e precipitação em um arquivo de texto. A data incluída está no formato “07SEP2015” (por exemplo), o que exige o uso de uma função para converter o texto do mês para um inteiro, que se encontra no fim do arquivo. Pode-se observar exemplos de como receber argumentos, funções, uso de while e if, como executar operações matemática (a temperatura é convertida de Kelvin para graus Celsius) e como recortar strings.

# Guarda valores de entrada em variaveis
# subwrd (cj de caracteres, n)
function main(args)
lat = subwrd(args,1)
lon = subwrd(args,2)
local = subwrd(args,3)
dati = subwrd(args,4)
datf = subwrd(args,5)

# Abre arquivo descritor de dados do GrADS
'open /path/descritor.ctl'
# Nomeia arquivo onde serao gravados os dados
fname = '/path/'local'.txt'
# Grava cabecalho
rc = write(fname,'data,tmin,tmax,prec')

# Alteracao de ambiente dimensionado
# Define coordenadas de onde serao pegos os dados
'set lat 'lat
'set lon 'lon
# Define datas inicial e final
'set time 'dati
'q dim'
ti = subwrd(result,41)
'set time 'datf
'q dim'
tf = subwrd(result,41)

while (ti <= tf)
'set t 'ti
'q dim'
tempo = subwrd(result,38)
dia = substr(tempo,4,2)
mes = substr(tempo,6,3)
mes = convmes(mes)
# substr (cj de caracteres, inicio, comprimento)
ano = substr(tempo,9,4)
'd tmin'
tmin = subwrd(result,4)
tmin = math_nint(tmin)
'd tmax'
tmax = subwrd(result,4)
tmax = math_nint(tmax)
'd prec'
prec = subwrd(result,4)
prec = math_nint(prec)
# Escreve variaveis em arquivo de saida; tambem converte temperatura
rc = write(fname,dia'/'mes'/'ano','tmin-273','tmax-273','prec,append)
ti=ti+1
endwhile
rc = close(fname)
'quit'

function convmes(i)
if ( i = JAN ) ; conv = 01 ; endif
if ( i = FEB ) ; conv = 02 ; endif
if ( i = MAR ) ; conv = 03 ; endif
if ( i = APR ) ; conv = 04 ; endif
if ( i = MAY ) ; conv = 05 ; endif
if ( i = JUN ) ; conv = 06 ; endif
if ( i = JUL ) ; conv = 07 ; endif
if ( i = AUG ) ; conv = 08 ; endif
if ( i = SEP ) ; conv = 09 ; endif
if ( i = OCT ) ; conv = 10 ; endif
if ( i = NOV ) ; conv = 11 ; endif
if ( i = DEC ) ; conv = 12 ; endif
return conv

O GrADS é muito usado para imprimir mapas e gráficos das variáveis. Podem ser apresentados usando o comando d (display) e ‘printim /path/grafico.png x600 y600 white’ para gravá-lo em um arquivo de imagem PNG – os parâmetros são o tamanho em pixel nos eixos x e y e fundo branco.

Um manual do GrADS pode ser visto em português nesse link do CPTEC/INPE. Este Reference Card também pode ajudar bastante.

3 comments

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.