Sistema de Exibição e Análise de Grade
GrADS
V1.5.1.12
Brian Doty
[email protected]
17 Fevereiro, 1998
(revisado em Dezembro de 1999)
Manual formatado e atualizado por:
Tom Holt,
Unidade de Pesquisa Climatológica,
Universidade de Anglia Oriental, Norwich, UK.
[email protected]
e
Mike Fiorino
Programa para Modelagem Diagnose e Intercomparação Climatológica
Lawrence Livermore Laboratório Nacional L-264
Livermore, CA 94551 [email protected]
Versão para português por:
José Fernando Pesquero - [email protected]
Sistema de Visualização e Operação Meteorológica
Centro de Previsão de Tempo e Estudos Climáticos - CPTEC/INPE
Rod. Dutra, Km 40 Cachoeira Paulista - SP - 12.630-000
Tabela de Tópicos
TABELA DE TÓPICOS
002
RESUMO
009
SUGESTÕES
010
COMO USAR ESTE MANUAL
011
GUIA DE APRESENTAÇÃO
012
1.0 INICIANDO E SAINDO DO GRADS
013
Ajuda
013
Diagnósticos iniciais
013
Opções iniciais
013
Saindo do GrADS
014
2.0 CONCEITO BÁSICO DE OPERAÇÃO
015
3.0 TUTORIAL
016
4.0 USANDO OS ARQUIVOS DE DADOS NO GRADS
021
Padrão de extensão dos arquivos
021
Introdução aos conjuntos de dados no GrADS
Conjuntos de dados em ponto de grade
O registro OPTIONS no arquivo descritor de dados
Conjuntos de dados de estação
O arquivo descritor de dados de estação
O Utilitário STNMAP
021
022
027
028
029
030
Criando Arquivos de dados
Exemplos de criação de um conjunto de dados em ponto de grade
Exemplos de criação de conjuntos de dados de estação
030
030
031
5.0 AMBIENTE DIMENSIONADO
034
6.0 NOMES DE VARIÁVEIS
035
2
7.0 EXPRESSÕES
036
8.0 VARIÁVEIS DEFINIDAS
037
Definindo novas variáveis
037
Indefinindo novas variáveis
039
9.0 EXIBINDO A PLOTAGEM DE DADOS
040
Exibindo os dados
040
Limpando a janela gráfica
040
10.0 TIPOS DE SAÍDAS GRÁFICAS
041
11.0 ANIMAÇÃO
043
12.0 CONTROLE DE PÁGINA
044
Páginas virtuais e reais
044
Controlando a área de plotagem
044
13.0 GRÁFICOS DE PRIMITIVAS
045
Comandos de desenho
045
Controlando os comandos de desenho
046
Plotagem em uma área específica
047
14.0 SAÍDA DE IMPRESSÃO
048
Produzindo um arquivo de impressão no GrADS
048
Imprimindo um arquivo impressão no GrADS
048
15.0 COMANDO EXEC
049
16.0 USANDO DADOS DE ESTAÇÃO
050
Operando com dados de estação
050
Modelos de estação
051
17.0 INTRODUÇÃO AOS SCRIPTS DO GRADS
3
052
O que os scripts podem fazer
052
Executando os scripts
052
Executando automaticamente um script
052
Armazenando scripts do GrADS
053
18.0 FACILIDADES ADICIONAIS
054
Comandos do shell
054
Opções de linha de comando nos utilitários do GrADS
054
Reinicializando o GrADS
054
Exibindo os metafiles do GrADS
055
SEÇÃO DE REFERÊNCIA
056
19.0 OPÇÕES GRÁFICAS
057
Gráficos 1-D
Gráficos de Linha (gxout = line):
Gráficos de Barra (gxout = bar)
Barras de Erro (gxout = errbar)
Gráfico de Linha Sombreada (gxout = linefill)
057
057
057
058
058
Gráficos em Grade 2-D
Plotando em Linhas de Contorno (gxout = contour)
Plotando em Contorno Sombreado ou Grade Pintada (gxout = shaded ou grfill)
Plotando em Valor de Ponto de Grade (gxout = grid)
Plotando em Forma de Vetor (gxout = vector)
Plotando em Forma de Barbela de Vento (gxout = barb)
Gráfico de Espalhamento (gxout = scatter)
Plotando um Valor de Ponto de Grade Especifico (gxout = fgrid)
Plotando em Forma de Linhas de Corrente (gxout = stream)
058
058
060
061
061
062
063
063
063
1-D Gráficos De Estação
Plotando uma série de tempo de barbela de vento em um ponto (gxout = tserbarb)
Plotando uma série de símbolos de tempo em um ponto (gxout = tserwx)
064
064
064
2-D Gráficos De Estação
Plotando os valores de estação(gxout = value)
Plotando a barbela de vento na estação (gxout = barb)
Plotando o símbolo de tempo na estação (gxout = wxsym)
Plotando o modelo de estação (gxout = modelo)
064
064
064
065
065
Outras Opções de Exibição
Encontrando a estação mais próxima do ponto x, y (gxout = findstn)
Escrevendo os dados para um arquivo (gxout = fwrite)
Exibindo informações sobre os dados (gxout = stat)
066
066
066
066
4
Comandos de Atribuição para Controlar a Exibição Gráfica
Atribuindo limite para plotagem 1-D ou plotagem scatter
Controlando a escala log quando a dimensão Z é plotada sobre qualquer plotagem
Controlando a orientação dos eixos
Controlando a rotulação dos eixos
Controlando a exibição das projeções de mapa
Controlando o desenho do mapa
Controlando a anotação
Controlando a exibição do console
Controlando a moldura
Controlando a exibição do logotipo
20.0 FUNÇÕES DO GRADS
067
067
067
068
068
069
069
070
070
070
070
071
Funções de média
aave
amean
ave
mean
vint
071
071
072
072
074
074
Funções de filtro
smth9
075
075
Funções de diferenças finitas
cdiff
075
075
Funções de grade
const
maskout
skip
076
076
077
078
Funções Matemática
abs
acos
asin
atan2
cos
exp
gint
gint(expr )
log
log10
pow
seno
sqrt
tan
078
078
078
079
079
079
079
079
079
079
079
080
080
080
080
Funções meteorológicas
tvrh2q
tvrh2t
080
080
082
Funções de propósitos especiais
tloop
081
082
5
Funções de dados de estação
gr2stn
oacres
stnave
stnmin
tnmax
083
083
083
085
085
085
Funções de vetor
hcurl
hdivg
mag
086
086
086
086
21.0 FUNÇÕES DEFINIDAS PELOS USUÁRIOS (UDFS):
088
Resumo das funções definidas pelo usuário
088
A tabela das funções definidas pelo usuário
088
Formato do arquivo transferência de dados da função
089
Formato do arquivo resultado ad função
091
Exemplo: Função de regressão linear
091
22.0 RECURSOS ADIC. DO CONJUNTOS DE DADOS NO GRADS
094
Cabeçalhos de grupos de arquivo e tempo
094
Controle do formato/estrutura da variável
094
Séries de tempo de múltiplos arquivos
099
Formato e a estrutura dos dados acrescentadas
101
23.0 PROGR. NO GRADS: USANDO A LINGUAGEM DE SCRIPT
102
Resumo da linguagem de script
102
Elementos da Linguagem
Variáveis
Variáveis de String
Variáveis Predefinidas
Variáveis Globais
Variáveis Compostas
Operadores
Expressões
Controle de Fluxo
Blocos IF
Blocos WHILE
Funções
Designação
Padrão de Entrada/Saída
103
103
103
103
103
104
105
106
106
106
107
108
108
102
6
Enviando comandos ao GrADS
Funções Intrínsecas
Funções de String
Funções Entrada/Saída
108
109
109
109
Comandos que complementam a linguagem de script
Widgets
Botões na tela
Rubber banding
110
112
113
113
Exemplos
114
24.0 USANDO PROJEÇÕES DE MAPA NO GRADS
116
Usando Grades Preprojetadas
Dados pré-projetados Estéreo Polar ( baixa resolução para modelos do NMC)
Dados pré-projetados Lambert Conformal
Modelo Eta do NMC (grades não balanceada)
Alta resolução em Estéreo Polar do NMC para os dados do SSM/I
Grades Estéreo Polar Oblíquas do RAMS no CSU
Conselhos quando usando dados preprojetados
116
117
120
122
124
126
128
Exibição de Projeções no GrADS
128
Resumo e Planos
128
APÊNDICES
130
APÊNDICE A: SCRIPTS SUPLEMENTARES
131
1) Correlação entre duas grades horizontais (corr.gs)
131
2) Script de Tabela de Cores no GrADS (cmap.gs)
131
3) Exibição de Fonte (font.gs)
134
4) Plota uma barra de cores (cbar.gs)
134
5) Acumula comandos e faz exibição de uma só vez (stack.gs)
134
6) Plota todos os Símbolos do WX (wxsym.gs)
134
7) (draw.gs)
134
8) (string.gs)
134
9) (loop.gs)
134
10) (bsamp.gs)
135
11) Script de Barra de cores Expandido(cbarn.gs)
7
135
12) Calculando o desvio padrão (sd.gs)
135
13) Desenha uma plotagem em x,y (xyplot.gs)
135
APÊNDICE B: USANDO DADOS GRIB NO GRADS
136
Gribscan
Opções de arquivo
Opções de processamento:
Nota especial aos usuários do NMC
Opções de exibição:
Alguns exemplos:
136
136
136
137
137
137
Gribmap
138
APÊNDICE C: USANDO GRADS NO PC
142
Conjunto de dados de outras plataformas
142
Imprimindo em impressoras sem postscript
142
Incorporando gravuras do GrADS dentro de software para PC
142
APÊNDICE D: - FACILIDADES DE REDE RELACIONADAS AO GRADS
143
Sites de ftp
143
Listserver
143
Sites na WWW
143
8
Resumo
O Analisador de Grade e Sistema de Exibição (GrADS) é uma ferramenta interativa que está
atualmente em uso global para a análise e exibição de dados de ciência da Terra. O GrADS está
implementado em todas as plataformas UNIX de estações de trabalho disponíveis, MS-DOS e
Win95/98, é gratuitamente distribuído na Internet. O GrADS fornece um ambiente integrado para
acesso, manipulação e exibição de dados de ciência da Terra.
O GrADS trabalha com modelos de dados em 4 dimensões, onde as dimensões normalmente são
latitude, longitude, nível e tempo. Cada conjunto de dados está localizado dentro de um espaço de 4
dimensões pelo uso de um arquivo descritor de dados. Podem ser descritos dados em grade e em
estação. Os dados em grade, podem ser não-linearmente espaçados; grades do tipo Gaussiana e grades
de modelagem oceanográfica de resolução variável são diretamente suportados. A representação
interna de um arquivo de dados pode ser binário ou GRIB.
Desde que cada conjunto de dados esteja localizado dentro de um espaço de dados 4-D, é muito fácil a
intercomparação dos conjuntos de dados. As operações podem ser desempenhadas entre dados em
grades diferentes, ou entre dados em grades e dados observacionais. Dados de diferentes conjuntos
podem ser graficamente sobrepostos, desde que estejam com registro espacial e temporal correto.
O usuário acessa os dados da perspectiva do modelo 4-D. Um ambiente dimensionado é descrito pelo
usuário como um subconjunto desejado do espaço 4-D. Os dados são acessados, manipulados e
exibidos dentro deste subconjunto.
As operações podem ser realizadas diretamente e interativamente nos dados, por chamar programas
como feitos em FORTRAN na linha de comando. O GrADS já possui um bom conjunto de funções
embutidas. Mesmo assim, os usuários podem adicionar as suas próprias funções como rotinas externas
escritas em qualquer linguagem de programação. A sintaxe das expressões permite que operações
complexas, que variam sobre grandes quantidades de dados, sejam realizadas com simples
expressões.
Uma vez que os dados foram acessados e manipulados, eles podem ser exibidos usando uma
variedade de técnicas de saídas gráficas, incluindo linha, barra, e gráfico de espalhamento, assim
como contorno, contorno sombreado, linhas de corrente, vetor de vento, caixa de grade, caixa de
grade sombreada e o modelo de plotagem de estação. Os gráficos também podem sair em formato
Postscript para impressão em impressoras de postscript monocromático ou colorido. O usuário tem
um vasto controle sobre todos os aspectos de saídas gráficas ou pode escolher usar intuitivamente as
saídas padrão.
Uma interface programável é fornecida na forma de uma interpretação de linguagem de script. Um
script pode exibir widgets, assim como gráficos e pega ações baseado no clique do mouse solicitado
pelo usuário. Podem ser construídas completas e sofisticadas interfaces gráficas de dados. A
linguagem de script pode também ser usada para automatizar cálculos e exibições de multi passo
complexas. O GrADS pode ser rodado em modo lote, e a linguagem de script facilita o uso do GrADS
para fazer longos trabalhos de lote durante a noite.
O grupo de desenvolvimento planeja suporte para dados de imagens geograficamente registradas e
desenvolvimento de uma interface para conjunto de dados em formato BUFR. Finalmente, planeja-se
implementar uma quantidade de recursos solicitado pelo usuário, tais como cortes transversais
verticais arbitrários, uma interface ao pacote de armazenamento de dados NetCDF, e uma acentuada
quantidade de ajuda através do clique do mouse .
9
Sugestões
Por favor quaisquer sugestões que tiver para melhorar o GrADS mande para [email protected].
Estamos sempre interessados em escutar o que se gosta e não se gosta sobre o GrADS e estaremos
sempre procurando formas para melhorá-lo.
Também recomendo que junte-se ao listserv do gradsusr descrito no apêndice D. Este fórum é
também monitorado pela comunidade de desenvolvimento do GrADS e é outro canal para fazer
sugestões.
10
Como usar este Manual
Este manual está dividido em três seções:
• Guia de apresentação
• Seção de referência
• Apêndices
Guia de apresentação
O guia de apresentação fornece uma estrutura conceitual, dentro da qual uma mais detalhada
informação está contida em subsequentes seções, e pode ser entendida quando for necessário. Assim,
esta seção contém a maior parte da informação necessária para uso do GrADS em um nível básico.
Entretanto, este não foi projetado para ficar sozinho e quase imediatamente os usuários certamente
irão precisar se referir à algum deste material na Seção de Referência.
Seção de Referência
Os primeiros dois capítulos desta seção contêm uma detalhada descrição de todas as opções
disponíveis para exibições gráficas dos dados, seguidos por uma referência às funções do GrADS.
Ambos os capítulos estão organizados por categorias funcionais. Isto habilita aos usuários a decidir o
que eles desejam fazer e, então, referem-se rapidamente à todas as opções disponíveis. Os capítulos
restantes nesta seção fornecem uma informação para um uso mais avançado do GrADS e uma
compreensão mais profunda dos processos descritos no guia de apresentação.
Apêndices
Os apêndices contêm uma informação considerada não imediatamente relevante para os primeiros
capítulos. Isto inclui alguma informação de plataforma específica e material auxiliar o qual poderá
reduzir o tempo gasto para tornar-se familiar com as facilidades do GrADS. Todos os usuários são
aconselhados a folhear os apêndices antes de usar o GrADS.
Usando o Manual
Em vez de um índice, este manual faz uso de uma detalhada Tabela de Tópicos para ajudar a achar as
informações. Os usuários são aconselhados a referir-se para este se estiverem com dúvidas sobre
como fazer algo. O manual foi organizado de uma maneira funcional para reduzir o tempo gasto na
leitura da informação irrelevante. Antes de usar o GrADS com seus próprios dados, é sugerido aos
novos usuários que leiam os três primeiros capítulos do Guia de Introdução e então experimentem
com o arquivo de dados de exemplo descrito no Capítulo 3 Tutorial. Os arquivos de descrição de
dados de exemplo, listados no Capítulo 4 Usando o Arquivo de Dados no GrADS, deve ser
estudado. Seguindo as instruções neste capítulo, a construção de um descritor de dados de teste para
uma pequena amostra de um conjunto de dados, deverá ser uma problema realmente simples. Isto
pode então ser feito usando o GrADS pela referência apropriada dos capítulos e gradualmente
expandir suas capacidades no GrADS.
11
Guia de Apresentação
12
1.0 Iniciando e Saindo do GrADS
O GrADS é iniciado digitando o comando: grads
Antes do ambiente de saída gráfica ser iniciado, o GrADS perguntará pelo modo paisagem ou retrato.
O modo paisagem tem 11 x 8.5 polegadas (normalmente o mais usado) e o retrato tem 8.5 x 11
polegadas (normalmente usado para produzir saídas verticais de impressão). O tamanho real da janela
não será, certamente, de 11 x 8.5 polegadas (ou 8. 5 x 11 polegadas), mas ao em vez disso será do
tamanho qualquer escolhido pelo uso do gerenciador de janela da estação de trabalho. Mas o GrADS
tratará a janela como se esta tivesse um dos tamanhos acima, assim é melhor manter o tamanho da
janela com um aspecto próprio. Isto pode ser feito usando o gerenciador de janela ou no GrADS
usando o comando:
set xsize x y
que modifica o tamanho da janela para x ,y pixels.
Após esta pergunta ser respondida, uma janela de saída gráfica, separada, será aberta. O tamanho
desta janela pode ser modificado a qualquer tempo.
Os comandos do GrADS são digitados na janela de texto de onde o GrADS foi iniciado. A saída de
gráficos aparecerá na janela de gráficos em resposta aos comandos digitados. Assim é necessário fazer
a janela de texto a janela "ativa"; a janela que recebe a entrada do teclado.
Ajuda
Digitando help na linha de comando, o GrADS mostra um resumo da lista de operações básicas para
fazer algo no GrADS. Isto é pretendido para balançar a memória, ao invés de fornecer uma grande
facilidade de ajuda. Se o manual do GrADS não está disponível, uma informação pode ser obtida, da
maior parte dos parâmetros do comando, apenas por digitar o comando. Alternativamente, uma
documentação compreensiva e pretendida a ser usada como uma facilidade da Web local, está sendo
construída.
Diagnósticos iniciais
Quando o GrADS é iniciado obtém-se um diagnóstico específico da plataforma, por exemplo:
GX Package Initialization: Size = 11 8.5
!!!! 32-bit machine version BIG ENDIAN
ga>
A linha !!!! conta que esta versão é para máquinas de 32-bit (i.e., os dados estão em 32-bit) e este foi
compilado para uma máquina big endian (a Sun neste caso). Na Cray será obtido ...
!!!! 64-BIT MACHINE VERSION (CRAYS)
Opções iniciais
Existem as seguintes opções como argumentos no comando 'grads' quando o GrADS é iniciado:
b
l
p
c
Inicia o grads no modo lote. Nenhuma janela de saída de gráficos é aberta.
Inicia o grads no modo paisagem. O modo retrato vs. modo paisagem não é perguntado.
Inicia o grads em modo de retrato.
Executa o comando fornecido como o 1º. comando do GrADS após ser inicializado.
13
Um exemplo:
grads -c "run profile.gs"
Estas opções podem ser usadas em combinações. Por exemplo:
grads -blc "run batch.gs"
Iniciará o grads no modo lote, usando a orientação paisagem (desta forma, nenhuma questão será
perguntada no início) e executará o comando:
"batch.gs" uma vez iniciado.
Saindo do GrADS
Para sair do GrADS, o seguinte comando deve ser usado:
quit
14
2.0 Conceito Básico de Operação
Conseguindo o sucesso de instalação e iniciando o GrADS, haverá duas janelas, uma janela terminal
com uma linha de comando, muito parecido com o C:> do MS-DOS, e uma janela de tamanho
modificável (fundo preto pelo padrão) onde os gráficos serão exibidos.
Os comando do GrADS são digitados na janela terminal e a resposta do GrADS é ou gráfica na janela
gráfica, ou texto na janela terminal. Os três comandos fundamentais do GrADS são:
• open abre ou torna disponível ao GrADS um arquivo de dados em grade ou dados de estação
• d
exibe uma "expressão" do GrADS (i.e., uma fatia dos dados)
• set
manipula o "qual", "onde" e "como" da exibição dos dados
A "expressão" do GrADS ou o que se deseja ver, pode ser tão simples como uma variável no arquivo
de dados que foi aberto, i.e., ‘d slp’ ou uma aritmética ou uma operação de funções dos dados no
GrADS, i.e., ‘d slp/100' ou ‘d mag(u,v)’ onde mag é uma função intrínseca do GrADS.
O "onde" da exibição dos dados é chamado de " ambiente dimensionado " e define de qual parte, curta
ou "muito grossa" do espaço geofísico 4-D (lon, lat, nível, tempo), é exibida. O ambiente
dimensionado é manipulado através do comando set e é controlado em coordenadas de grade (x, y, z,
t ou índices) ou em coordenas globais (lon, lat, lev, tempo).
O "qual" e "como" da exibição é controlado pelo comando set, e inclui os métodos gráficos (i.e.,
contornos, linhas de corrente) e dados (i.e., d para um arquivo).
Os gráficos do GrADS podem ser escritos para um arquivo (i.e., enable print nome do arquivo e
print) e então convertido em postscript para impressão e/ou conversão para outros formatos de
imagem.
Em adição, o GrADS inclui gráfico de primitivas (i.e., linhas e círculos) e rótulos básicos através do
comando draw.
O comando q ou query é usado para obter informações do GrADS, tais como, que arquivos estão
abertos e até mesmo estatísticas.
15
3.0 Tutorial
Um tutorial e um exemplo de dados estão disponíveis nos sites de distribuição
(ftp://grads.iges.org/example.tar e ftp://sprite.llnl.gov/pub/fiorino/grads/exemple). Porções dos
sample.txt estão incluídos abaixo como outro ponto de partida para novos usuários do GrADS:
A seguinte sessão de exemplo dará um conhecimento de como devem ser usadas as capacidades
básicas do GrADS. Será necessário o arquivo de dados 'model.dat' no sistema. Esta sessão de amostra
toma cerca de 30 minutos para realizá-la.
Este arquivo de dados está descrito pelo arquivo descritor de dados 'model.ctl'. Seria interessante olhar
este arquivo antes de continuar. O arquivo descritor de dados descreve o arquivo de dados real, o qual
no caso, contém 5 dias de grades globais que tem 72 x 46 elementos em tamanho.
Para iniciar o GrADS, deve ser digitado:
grads
Se o grads não está no diretório corrente, ou se este não está em algum lugar do PATH, entre com o
nome inteiro do caminho, por exemplo:
/usr/homes/smith/grads/grads
O GrADS perguntará uma questão na linha de comando: paisagem vs. retrato; somente pressione
enter. Neste ponto deverá abrir no console uma janela de saída gráfica. O tamanho desta janela pode
ser modificável. Os comandos do GrADS deverão ser digitados na janela de onde o GrADS foi
iniciado – será necessário tornar a janela 'ativa' antes de digitar e não deverá cubrir inteiramente esta
janela com a janela de saída gráfica.
Na janela de texto , haverá uma linha de comando: ga>. Os comandos do GrADS deverão ser
digitados nesta linha de comando e os resultados serão exibidos na janela de saída gráfica.
O primeiro comando a ser digitado é:
open model.ctl
Para exibir o que existe neste arquivo digite:
query file
Uma das variáveis disponíveis é ps, para pressão à superfície. Para exibir esta variável penas digite:
d ps
d é apenas o curto comando para exibição. Note, pelo padrão, que o GrADS exibirá uma plotagem X,
Y referente ao primeiro tempo e ao nível mais baixo no conjunto dos dados.
Digite os comandos para alterar as ' dimensões do ambiente '. O comando de exibição (e
implicitamente, o acesso, a operação e a saída dos dados) fará coisas com respeito ao corrente
ambiente dimensionado. O ambiente dimensionado pode ser controlado entrando com comandos set:
16
clear
set lon -90
set lat 40
set lev 500
set t 1
dz
limpa a janela gráfica
atribui longitude fixa
atribui latitude fixa
atribui nível fixo
atribui tempo fixo
exibe uma variável
Na seqüência dos comandos acima, todas as quatro dimensões do GrADS foram atribuídas para um
valor singular, é dito que estas dimensões estão fixas. Quando a variável for exibida, desde que todas
as dimensões estejam fixas, obtém-se um único valor, neste caso, o valor na localização 90W, 40N,
500mb e no 1º. tempo no conjunto de dados.
Se for digitado agora:
set lon -180 0
X está agora com uma dimensão variando
dz
Foi atribuído à dimensão de X, ou longitude, uma variação. Isto foi feito devido aos dois valores
colocados no comando set. Agora uma dimensão está variando (as outras dimensões estão ainda
fixas) e, quando for exibido uma variável, será plotado um gráfico de linha, neste caso, um gráfico de
500mb na altura de 40N.
Digite:
clear
set lat 0 90
dz
Neste caso há duas dimensões variando, assim pelo padrão, uma plotagem em contorno é realizada.
Agora com 3 dimensões variando:
c
set t 1 5
dz
uma seqüência de animação é realizada, neste caso, através do tempo.
Agora digite:
clear
set lon -90
set lat -90 90
set lev 1000 100
set t 1
dt
du
Neste caso é atribuído ao Y (latitude) e ao Z (nível) dimensões variantes, assim uma seção vertical
transversal é plotada. As duas variáveis exibidas simplesmente se sobrepõem uma sobre a outra. O
número de campos exibidos sobrepostos será quantos desejar antes de entrar com o comando clear.
17
Outro exemplo, neste caso com X e T variando (diagrama de Hovmoller):
c
set lon -180 0
set lat 40
set lev 500
set t 1 5
dz
Agora que já é conhecido como selecionar uma porção do conjunto dos dados, o tópico será mudado
para operações nos dados. Primeiro, o ambiente dimensionado é mudado para uma variação Z, Y:
clear
set lon -180 0
set lat 0 90
set lev 500
set t 1
Querendo ver a temperatura em Fahrenheit em vez de Kelvin. A conversão será feita digitando:
display (t-273.16)*9/5+32
Pode ser usada qualquer expressão que envolva os operadores padronizados de +, -, *, e /, e as quais,
envolvem operandos que podem ser constantes, variáveis, ou funções. Um exemplo envolvendo
funções:
clear
d sqrt(u*u+v*v)
para calcular a magnitude do vento. Uma função é fornecida para fazer este cálculo diretamente:
d mag(u,v)
Outra construção de função é a função do cálculo da média:
clear
d ave(z,t=1,t=5)
Neste caso é calculado a média dos 5 dias. É possível remover a media do campo corrente:
d z - ave(z,t=1,t=5)
As médias podem ser tomadas sobre a longitude para remover a media zonal:
clear
d z-ave(z,x=1,x=72)
dz
Uma diferenciação no tempo pode também ser aplicado:
clear
d z(t=2)-z(t=1)
Este calcula a variação entre os dois campos sobre 1 dia. Este cálculo pode também ser feito usando
um compensador do tempo atual:
d z(t+1) - z
A especificação completa do nome de uma variável é:
name.file(dim +|-|= valor, ...)
18
Se dois arquivos estiverem abertos, talvez um com saída de modelo e o outro com análises, a
diferença entre os dois campos pode ser tomada entrando com: display z.2 - z.1
Esta função interna calcula a vorticidade relativa horizontal via diferenciação finita:
clear
d hcurl(u,v)
Outra função calcula o peso da massa integral vertical:
clear
d vint(ps,q,275)
Aqui foi calculado a água precipitável em mm.
Passando agora para o tópico de controle de saída gráfica, até aqui foi permitido ao GrADS controlar
o intervalo de contorno, o espaçamento entre as linhas pode ser mudado digitando:
clear
set cint 30
dz
Ou também controlar a cor do contorno digitando:
clear
set ccolor 3
dz
Outro modelo de exibição dos dados pode ser selecionado:
clear
set gxout shaded
d hcurl(u,v)
Se este não estiver muito suave, um suavizador cúbico pode ser aplicado digitando:
clear
set csmooth on
d hcurl(u,v)
Um gráfico diferente pode sobrepor este digitando:
set gxout contour
set ccolor 0
set cint 30
dz
e um título também pode ser anotado:
draw title 500mb Altura e Vorticidade
Para ver os vetores de vento:
clear
set gxout vector
d u;v
Aqui foram exibidas duas expressões, a 1ª. para a componente U do vetor; a 2ª. para a componente V
do vetor. Para colorir, um 3º campo pode ser especificado:
d u;v;q
19
ou talvez:
d u;v;hcurl(u,v)
Para exibir pseudo vetores entre qualquer campo escolhido:
clear
d mag(u,v) ; q*10000
Aqui a componente U é a magnitude do vento e a componente V é a umidade.
Um processo quase idêntico para ver as linhas de corrente (e as colorir):
clear
set gxout stream
d u;v;hcurl(u,v)
Os valores vigentes dos pontos de grade:
clear
set gxout grid
du
É possível alterar o fundo do mapa:
clear
set lon -110 -70
set lat 30 45
set mpdset hires
set digsiz 0.2
tamanho dos dígitos
set dignum 2
# de dígitos depois da casa decimal
du
Como também alterar a projeção:
set lon -140 -40
set lat 15 80
set mpvals -120 -75 25 65
set mproj nps
set gxout contour
set cint 30
dz
constantes da projeção de mapa
estéreográfica polar norte
Neste caso, o grads foi informado que deverá acessar e operar os dados da longitude 140W para 40W,
e da latitude 15N para 80N, foi exibido uma plotagem estereográfica polar que contém a região unida
entre 120W a 75W e 25N a 65N. A área extra de plotagem é recortada pela rotina de projeção de
mapa.
Isto conclui esta sessão. Neste ponto, examine um conjunto de dados adicionais, ou siga através da
documentação do GrADS para tentar as outras opções descritas lá.
20
4.0 Usando os Arquivos de Dados no GrADS
O GrADS suporta dois tipos de dados básicos:
•
•
dados em grade
dados de estações
dados em uma grade
estação ou pontos de observações.
Os dados e os dados meta (ou informações sobre os dados) são guardados em arquivos separados. O
arquivo de dados meta contém uma descrição completa dos dados além do nome deste arquivo de
dados. O arquivo de dados é puramente de dados com nenhum espaço ou tempo identificador. O
arquivo que se abre no GrADS é o arquivo descritor de dados (os dados meta) ou arquivo .ctl. O .ctl
é construído para descrever os vários tipos de dados e estruturas (i.e., binário e GRIB).
É, no mínimo, necessária a abertura de um arquivo descritor de dados antes de entrar outros comandos
do GrADS.
open nome_do_arquivo
Não existe problemas em abrir mais de um arquivo descritor de dados. Cada arquivo será numerado
na ordem em que ele foi aberto. Inicialmente, o "arquivo padrão" é o arquivo 1, ou o 1º. arquivo
aberto. A importância do arquivo padrão será discutido mais tarde.
Padrão de extensão do arquivo
".ctl" é, de fato, a extensão padronizada para os arquivos descritores de dados do GrADS.
Contribuindo para aderir a este padrão, não há necessidade de digitar a extensão ".ctl" quando digitar
o comando open. Por exemplo, digitando:
open jandata.1966 tem o mesmo efeito de open jandata.1966.ctl
Introdução aos conjuntos de dados no GrADS
Os dados puros estão em disco ou no formato binário de acesso binário direto ou seqüencial não
formatado (IEEE flutuantes e inteiros) ou GRIB.
Os dados estão descritos pelo arquivo descritor de dados, o qual contém:
•
•
•
Nome do conjunto de dados binário;
Mapeamento entre coordenada de grade e coordenada global;
Número de variáveis, abreviações para as variáveis.
O arquivo descritor de dados tem formato livre onde, cada campo, é delimitado por um campo vazio.
Isto pode ser criado facilmente com um editor de texto. O arquivo descritor de dados designa, para
cada variável do arquivo, de um até doze caracteres de abreviação. Essas abreviações são usadas em
expressões do GrADS.
O uso do arquivo descritor de dados é agora discutido para dados em ponto de grade e dados de
estação. Este material usa exemplos simples os quais devem ser o bastante para habilitar os usuários a
explorar as capacidades do GrADS. Mais recursos avançados de arquivos .ctl estão descritos no
Capítulo 22 na Seção de Referência.
21
Conjuntos de dados em ponto de grade
Os grade do GrADS pode conter qualquer número de variáveis em especificada longitude, latitude,
níveis verticais e intervalos de tempo. As latitudes podem variar de norte para sul ou de sul para
norte (o padrão), e os níveis podem variar de cima para baixo ou de baixo para cima.
O GrADS vê este conjunto de dados como um vetor gigante "5-D" — com X (longitude ou lon)
variando mais rápido, então Y (latitude ou lat), Z ( nível vertical ou lev), o tipo de variável e então T
(tempo).
É mais fácil pensar nos dados em termos de uma seqüência de grades horizontais, onde variam
longitude e latitude. Cada grade horizontal representa uma variável particular, em uma altura e tempo
particular, além de serem do mesmo tamanho em qualquer particular conjunto de dados do GrADS (se
existir grades de tamanhos diferentes, estas devem ser criadas em conjuntos de dados separados).
Estas grades são escritas para o conjunto de dados na seguinte ordem: começando com uma variável
particular, as grades, para cada nível vertical, são escritas (em um tempo particular) em ordem
ascendente. Então as grades para a próxima variável serão escritas. Quando todas as grades, em um
tempo particular forem escritas, as grades do próximo tempo serão escritas.
O formato deste conjunto de dados tem assim exatamente o mesmo formato do Pressure History do
COLA, exceto: não há registros de data/tempo e, pelo padrão, a latitude varia de sul para norte (não de
norte para sul como nos dados do pressure history).
Cada conjunto de dados binário em grade, é descrito por um arquivo descritor de dados separado
deste, basicamente é uma tabela (mapa) dos conjuntos de dados binários. Seguindo há um exemplo de
um arquivo descritor de dados:
DSET ua.dat
TITLE Dados de Ar Superior
UNDEF -9.99E33
OPTIONS BYTESWAPPED
XDEF 80 LINEAR -140.0 1.0
YDEF 50 LINEAR 20.0 1.0
ZDEF 10 LEVELS 1000 850 700 500 400 300 250 200 150 100
TDEF 4 LINEAR 0Z10apr1991 12hr
VARS
6
slp
0 0 Pressão ao nível médio do mar
z
10 0 Altura geopotencial
t
10 0 Temperatura
td
6 0 Ponto de orvalho
u
10 0 Componente u do vento
v
10 0 Componente v do vento
ENDVARS
O arquivo descritor de dados tem ' formato livre', i.e., cada entrada é delimitada por caracter em
branco e pode aparecer em qualquer coluna. Os Registros comentados começam com um asterisco
('*') na coluna 1. Os comentários não podem aparecer na lista de registros de variáveis (entre os
registros vars e endvars). Os registros não podem ser mais longos que 255 caracteres.
Neste exemplo, um conjunto de dados binário é especificado como ua.dat, o valor indefinido ou
ausente dos dados é -9.99e33, há 80 pontos de grade na direção do X, 50 na direção Y, 10 níveis, 4
tempos e 6 variáveis. As variáveis, z, t, u, e v têm 10 níveis, a variável td tem 6 níveis, e a variável
slp tem um nível (veja abaixo para mais uma descrição especifica de cada entrada).
Pensando em termos de pontos de dados em X e Y, em um nível para uma variável em um tempo
sendo uma grade horizontal. Esta grade está exatamente na mesma ordem de armazenamento de um
22
vetor em FORTRAN, neste caso um vetor de DIMENSÃO A(80,50). A primeira dimensão sempre
varia de oeste para leste, a segunda de sul para norte (pelo padrão).
No exemplo acima, as grades horizontais seriam escritas na seguinte ordem:
Tempo 1, Nivel ?, Variável slp
Tempo 1, Nível 1000, Variável z
Tempo 1, Nível 850, Variável z
então os níveis de 700, 500, 400, 300, 250, 200, então
Tempo 1, Nível 150, Variável z
Tempo 1, Nível 100, Variável z
Tempo 1, Nível 1000, Variável t
Tempo 1, Nível 850, Variável t
então os níveis de 700, 500, 400, 300, 250, 200, então
Tempo 1, Nível 150, Variável t
Tempo 1, Nível 100, Variável t
Tempo 1, Nível 1000, Variável td
Tempo 1, Nível 850, Variável td
Tempo 1, Nível 700, Variável td
Tempo 1, Nível 500, Variável td
Tempo 1, Nível 400, Variável td
Tempo 1, Nível 300, Variável td
Tempo 1, Nível 1000, Variável u
Tempo 1, Nível 850, Variável u
então os níveis de 700, 500, 400, 300, 250, 200, então
Tempo 1, Nível 150, Variável u
Tempo 1, Nível 100, Variável u
Tempo 1, Nível 1000, Variável v
Tempo 1, Nível 850, v Variável v
então os níveis de 700, 500, 400, 300, 250, 200, então
Tempo 1, Nível 150, Variável v
Tempo 1, Nível 100, Variável v
Tempo 2, Nível ?, Variável slp
Tempo 2, Nível 1000,Variável z
Tempo 2, Nível 850, Variável z
Tempo 2, Nível 700, Variável z
Tempo 2, Nível 500, Variável z
Tempo 2, Nível 400, Variável z
.
etc.
Uma descrição de cada registro do arquivo descritor de dados em grade de exemplo segue:
DSET nome – do conjunto – de dados
Esta linha especifica o nome do conjunto de dados binário. Este pode ter em caso misto.
Se o conjunto de dados binário está no mesmo diretório que o arquivo descritor de dados, pode ser
digitado, no descritor de dados, o nome do arquivo de dados sem especificar o diretório completo,
apenas por prefixar um caracter ^ . Por Exemplo, se o arquivo de descritor de dados é:
/dados/wx/grads/sa.ctl
e o arquivo de dados binário é:
23
/dados/wx/grads/sa.dat
pode ser usado o seguinte nome no arquivo de descritor de dados:
DSET ^sa.dat
em vez de:
DSET /dados/wx/grads/sa.dat
Enquanto os dois arquivos forem guardados juntos, estes poderão ser colocados em qualquer
diretório sem ter que mudar o caminho dos dados do arquivo descritor.
TITLE caracteres
Uma breve descrição do conteúdo do conjunto de dados, este será exibido durante o comando
query, portanto neste local pode ser colocado uma informação significativa.
UNDEF valor
Indefinido ou ausente. As operações no GrADS e as rotinas gráficas irão ignorar os dados com
este valor no conjunto de dados. Este é um parâmetro requerido mesmo que não exista dados
indefinidos.
OPTIONS BYTESWAPPED
Indica que o arquivo de dados binário está com o byte invertido com relação ao byte normal da
máquina. Isto pode acontecer ao mudar, por exemplo, um arquivo em formato binário de uma Sun
para um PC. Colocando esta palavra chave no arquivo descritor do GrADS, o byte do arquivo de
dados que está sendo lido será invertido.
XDEF número < LINEAR início incremento> ou <LEVEL lista de valores>
Define o mapeamento entre os valores de grade e longitude. Especificamente:
número -- o número de valores de grade na direção X, especificado como um número inteiro.
Deve ser >= 1.
LINEAR ou LEVELS - Indica o tipo do mapeamento da grade.
Para LINEAR:
início
-- longitude inicial, ou a longitude para X=1. Deve ser especificado como um
valor de ponto flutuante onde negativo indica graus oeste.
incremento -- espaçamento entre o valores de grade na direção X. É assumido que os
valores da dimensão X vão de oeste para leste. Especificado como um valor positivo
flutuante.
Para LEVELS:
lista de valores -- lista de valores ‘numéricos’ representando a longitude de cada dimensão
X. Pode começar e continuar no próximo registro no arquivo descritor (o registro não
pode ter mais que 255 caracteres). Deve existir no mínimo 2 níveis (de outro modo deve
ser usado o mapeamento LINEAR).
YDEF número mapeamento início <incremento> ou <LEVELS lista de valores>
Define o mapeamento entre os valores de grade e latitude. Especificamente:
número -- número de valores de grades na direção Y, especificada como um número inteiro.
mapeamento -- tipo de mapeamento, especificado como uma palavra-chave.
As válidas são:
LINEAR -- mapeamento linear
GAUSR15
-- latitudes Gaussiana R15
24
GAUSR20
GAUSR30
GAUSR40
-- latitudes Gaussiana R20
-- latitudes Gaussiana R30
-- latitudes Gaussiana R40
Exemplos de como especificar o mapeamento GAUSRxx:
YDEF 20 GAUSR40 15
Indica que há 20 valores na dimensão Y os quais começam na Latitude Gaussiana 15 (64.10
sul) na grade Gaussiana R40. Assim os 20 valores irão corresponder às Latitudes:
64.10, -62.34, -60.58, -58.83, -57.07, -55.32, -53.56,
51.80, -50.05, -48.29, -46.54, -44.78, -43.02, -41.27,
39.51, -37.76, -36.00, -34.24, -32.49, -30.73
YDEF 102 GAUSR40 1
A grade gaussiana inteira esta presente, começando na latitude mais ao sul (-88.66).
início -- Para o mapeamento LINEAR, a latitude inicial, i.e., a latitude onde Y = 1, e é
especificada como um valor de ponto flutuante, com o negativo indicando graus sul. Para
mapeamento GAUSRxx, o valor inicial indica o primeiro número da grade gaussiana, onde 1
será a latitude de grade gaussiana mais ao sul.
incremento -- espaçamento entre os valores de grade na direção Y. É assumido que os valores da
dimensão Y vão de sul para norte. Pode ser especificado por um valor positivo de ponto
flutuante. É usado somente pelo mapeamento LINEAR.
Para LEVELS:
lista de valores -- lista de valores ‘numéricos’ representando a latitude de cada dimensão Y.
Pode começar e continuar no próximo registro do arquivo descritor (o registro não pode ter
mais que 80 caracteres). Deve haver no mínimo 2 níveis (de outro modo deve ser usado o
mapeamento LINEAR).
ZDEF número mapeamento <início incremento> ou <lista de valores>
Define o mapeamento entre os valores de grade e os níveis de pressão. Especificamente:
número
-- número de valores de grade na direção Z, especificado como um número inteiro.
mapeamento-- tipo de mapeamento, especificado como uma palavra-chave.
Os válidos são:
LINEAR – mapeamento linear
LEVELS -- níveis arbitrários de pressão
início -- quando o mapeamento é LINEAR, este é o valor inicial , ou o valor quando Z=1.
incremento -- quando o mapeamento é LINEAR, indica o incremento na direção de Z ou do mais
baixo para o mais alto. Este pode ser um valor negativo, por exemplo:
ZDEF 10 LINEAR 1000 -100
indicando que os dados estão para os níveis 1000, 900, 800, 700, etc.
lista de valores -- quando o mapeamento é LEVELS, os níveis especificados são simplesmente
listados em ordem ascendente. Se há somente um nível, deve ser usado LINEAR, desde que
LEVELS implica em dois níveis no mínimo.
TDEF número do incremento tempo-inicial LINEAR
Define o mapeamento entre valores de grade e tempo. Especificamente:
número
-- número de tempos no conjunto de dados. Especificado como um número inteiro.
tempo-inicial – valor inicial de data/tempo, especificados no formato absoluto de data/tempo do
25
GrADS. Este é o valor quando T=1. O formato de data/tempo é:
hh:mmZddmmmyyyy onde:
hh = hora (dois dígitos inteiros)
mm = minutos (dois dígitos inteiros)
dd = dia (um ou dois dígitos inteiros)
mmm = mês (jan, feb, mar, apr, may, jun, jul, aug, set, oct, nov, dec)
yyyy = ano (dois ou quatro dígitos inteiros. Dois dígitos implica em um ano entre 1950 e
2049).
Se não for especificado, o padrão de hh é 00, o de mm é 00 e o de dd é 1. O mês e o ano
deverão ser especificados. No formato absoluto de data/tempo do GrADS nenhum espaço
em branco intervindo é permitido.
Exemplos:
12Z1JAN1990
14:20Z22JAN1987
JUN1960
incremento -- incremento de tempo. Especificado formato de incremento de tempo do GrADS:
vvkk onde:
vv = um número inteiro, 1 ou 2 dígitos
kk = uma palavra-chave de incremento,
mn = minutos
hr = horas
dy = dias
mo = mês
yr = ano
Exemplos:
20mn
1mo
2dy
-- incremento de 20 minutos
-- incremento de 1 mês
-- incremento de 2 dias
Exemplos adicionais de uma declaração do TDEF:
TDEF 24 LINEAR 00Z01JUN1987 1HR
O conjunto tem 24 tempos, iniciando às 00Z de 1º de Junho de 1987, com incremento de
1hora
TDEF 30 LINEAR 2JUN1988 1DY
O conjunto de dados tem 30 tempos, começando às 00Z de 2 de Junho de 1988, com
incremento de 1 dia.
VARS número
Indica o início dos registros que descrevem as variáveis no conjunto de dados.
número – o número do registro de variáveis
registro de variáveis (slp ... v)
Há seis registros de variáveis neste exemplo, cada um com o seguinte formato:
abrev niv unids descrição
26
abrev
-- de um 1 a 12 caracter de abreviação para a variável. Esta abreviação deve
começar com um caracter alfabético (a-z) e ser composto de caracteres alfabéticos e
números. Esta abreviação será o "nome" da variável que será acessada dentro GrADS.
niv
-- um valor inteiro especificando o número de níveis que esta variável tem no
conjunto de dados. Este não pode exceder o número de níveis na declaração do ZDEF. O
valor do niv 0 indica que esta variável tem um "nível" que não corresponde à um nível
vertical. Um exemplo poderia ser uma variável de superfície.
unids
-- usado para dados em formato GRIB ou formato/estrutura de dados
especial. Deve ser colocado um valor de 99 aqui.
descrição
-- uma descrição da variável em texto, com no máximo 40 caracteres.
ENDVARS
Após o último registro das variáveis vem a declaração ENDVARS. Este é o fim do arquivo
descritor de dados. Linhas vazias após a declaração ENDVARS pode fazer o open do GrADS
falhar!
O registro OPTIONS no arquivo descritor de dados
O registro options no arquivo descritor permite o controle de vários aspectos na forma que o GrADS
interpreta o arquivo de dados. Este aposenta o antigo registro "format" e tem a forma:
options <palavras-chave>
Algumas palavras-chave são:
options <yrev> <zrev> <sequential>
<little_endian> <cray_32bit_ieee> onde:
<byteswapped>
<template>
<big_endian>
sequential especifica que o arquivo foi escrito no I/O não formatado seqüencial, onde cada
registro é uma grade variando em X,Y. Note que se tiver somente uma dimensão em X e Y no
arquivo, cada registro no arquivo será um elemento longo (este modo pode não ser uma boa
idéia).
yrev
especifica que a dimensão Y, ou latitude, foi escrita na ordem invertida da qual o
GrADS tem no passado feito. Uma coisa importante para lembrar é que o GrADS ainda
apresenta a visão de que os dados vão de sul para norte. A declaração do YDEF não muda;
estes ainda descrevem a transformação de um espaço de grade indo de sul para norte. O reverso
do eixo Y é feito quando os dados estão sendo lidos do arquivo de dados.
zrev
indica que os dados foram escritos dentro do arquivo do topo para baixo, em vez do
contrário como o GrADS assume. As mesmas considerações do yrev são aplicadas.
template
nomes de arquivos arranjados estão em uso (veja a seção em Séries de tempo de
arquivo múltiplo no Capítulo 22)
byteswapped a ordem dos bytes é invertida (veja as próximas duas opções e o exemplo do arquivo
.ctl acima)
O melhor modo de assegurar a independência de hardware nos arquivos de dados em grade é
especificar a plataforma da fonte dos dados. Isto permite que os dados trabalhem em ambos os
tipos de hardware sem ter que se preocupar com a ordem dos bytes. Os dois parâmetros de
opção seguintes indicam a atual ordem dos bytes dos dados. Se os dados já estão no formato
correto, então nenhuma conversão será realizada. Estas opções facilitam o deslocamento de um
arquivo de dados e o arquivo descritor entre as máquinas.
big_endian real de 32-bit IEEE criada em uma plataforma de big_endian (cray, sun, sgi e hp).
little_endian real de 32-bit IEEE criada em uma plataforma de little_endian (iX86 e dec)
27
Conjuntos de dados de estação
Os conjuntos de dados de estação são escritos para um arquivo binário uma observação em um tempo.
A única ordem necessária é que as observações das estações estejam agrupadas em um arquivo dentro
de algum intervalo de tempo. Por exemplo, o intervalo de tempo para as observações de ar superior
poderia ser de 12 horas. No Capítulo 16 há mais informação sobre as facilidades do GrADS para
análise e exibição dos dados de estação.
As variáveis dentro de cada observação estão divididas em dois grupos. Cada variável ou é uma
variável de superfície, assim pode ser relatada no máximo uma vez por estação, ou é uma variável
dependente de nível, assim pode ser relatada em um número de níveis diferentes dento uma
observação.
O controle de ordenação dos bytes para os arquivos de dados de estação: Pode agora ser especificado
o trocador de bytes (byteswapped, big_endian, ou little_endian) para os arquivos de dados de estação.
O utilitário stnmap, e o GrADS, desempenharão a necessária conversão. Os arquivos de mapa de
estação devem ainda ser criados na máquina onde eles serão usados.
O formato de uma observação em um arquivo de dados de estação binário é:
• Um cabeçalho que fornece informação sobre a localização da estação;
• Variáveis de Superfície, se quaisquer existir ;
• Variáveis dependentes de níveis, se quaisquer existir;
O cabeçalho é descrito pela seguinte estrutura de dados em linguagem C:
struct rpthdr {
char id[8];
float lat;
float lon;
float t;
int nlev;
int flag;
};
/*
/*
/*
/*
/*
/*
Caracter identif de estação
Latitude da observação
Longitude da observação
Tempo em relativas unids grade
Número de níveis seguintes
Flag atrib var independente
*/
*/
*/
*/
*/
*/
Uma descrição detalhada de cada item do cabeçalho segue:
Id
- identificador da estação. Este é um identificador de 1 a 7 caracteres que deve identificar
somente a estação. Este pode ser designado arbitrariamente; i.e., as estações podem ser numeradas
em alguma ordem arbitrária.
lat
- localização da dimensão Y da estação em coordenadas globais, tipicamente latitude.
lon
- localização da dimensão X da estação em coordenadas globais, tipicamente longitude.
t
- tempo desta observação, em unidades de grade relativas. Este refere-se ao modo como as
estações estão agrupadas no tempo. Por exemplo, no trabalho com observações de superfície de
rotas aéreas, pode-se provavelmente ter um intervalo de agrupamento de tempo de um hora. Se for
necessário tratar os tempos das observações de cada observação como sendo de exatamente 1 hora,
t deve ser atribuído para 0.0. Se a observação foi para 12:15pm, e o agrupamento de tempo estava
sendo escrito para 12pm, pode-se atribuir t para 0.25. Assim, t deverá tipicamente ter um limite
entre -0.5 a 0.5.
nlev
- número de grupo de dados seguindo o cabeçalho. Este é a soma de um grupo de superfície,
se presente, mais o número de grupos dependentes de nível. Se for atribuído para zero marca o fim
de um grupo de tempo
flag
- se zero, não há nenhuma variável de superfície seguindo o cabeçalho. Se um, então há
variáveis de superfície seguindo o cabeçalho.
Seguindo o cabeçalho, os dados desta observação são escritos. O primeiro grupo de dados deverá ter
todas as variáveis de superfície presente. A presença ou ausência da variável de superfície, será
determinada pelo flag no cabeçalho. Se presente, então todas as variáveis de superfície
28
deverão ser escritas — variáveis ausentes deverão receber o valor de dados ausentes. Assim, cada
grupo de variáveis de superfície deverá ter o mesmo tamanho para cada observação no arquivo.
As variáveis de superfície são escritas como números em ponto flutuante. A ordem das variáveis deve
ser a mesma em cada observação e deve ser a mesma ordem dada no arquivo descritor de dados.
Seguindo o grupo da variável de superfície, qualquer número de grupos dependentes de nível podem
ser escritos. O número total de grupos de dados é fornecido no cabeçalho. Cada grupo dependente de
nível, deve ter todas as variáveis dependentes de nível presente, até mesmo se elas estiverem
preenchidas com o valor de dado ausente. Assim, cada grupo dependente de nível será do mesmo
tamanho para todos os níveis e todas as observações no arquivo.
O grupo dependente de nível é escrito como segue:
nível
-- valor em ponto flutuante dando o valor da dimensão de Z em coordenadas globais para
este nível
variáveis -- as variáveis dependentes de nível para este nível.
Após todas as observações, para um grupo de tempo, serem escritas, um cabeçalho especial (com
nenhum grupo de dados) é escrito para indicar o final de tempo do grupo. O cabeçalho terá um valor
de zero para o nlev. O próximo grupo de tempo, então, pode começar logo após. Um grupo de tempo
com nenhuma mensagem ainda conterá um registro de cabeçalho finalizador de grupo tempo (i.e.,
dois finalizadores em uma fila).
Os arquivos de dados de estação do GrADS devem ser escritos como um conjunto de dados stream do
UNIX, sem qualquer informação de descritor de registro embutido. Isto é facilmente feito em um
programa em C. De um programa em FORTRAN, isto normalmente requer uma opção de
dependência de sistema na declaração OPEN. Por exemplo, no FORTRAN da DEC pode-se usar a
opção:
RECORDTYPE='STREAM'
opção para evitar a presença da informação de descritor de registro, embutido na saída do arquivo.
Exemplos de programa em C e FORTRAN, para criar conjuntos de dados de estação, serão fornecidos
neste documento mais tarde. Por não haver padrões para I/O binários no f77 é fortemente
recomendado que os programas de conversão de dados de estação sejam escritos em C.
O arquivo descritor de dados de estação
O formato do arquivo descritor de dados, para os dados de estação, é parecido com o formato dos
conjuntos de dados em grade. Um exemplo de um arquivo de descritor de dados de estação é:
dset ^ua.reps
dtype station
stnmap ^ua.map
undef -999.0
title Tempo Real obs de ar Superior
tdef 10 linear 12z18jan1992 12hr
vars
12
slp
0 99 SLP
ts
0 99 Temp. Superf.
ds
0 99 Ponto de Orv. Superf.
us
0 99 Vento U Superf.
vs
0 99 Vento V Superf.
z
1 99 Geopotencial
t 1 99 Temperatura
d
1 99 Ponto de Orvalho
29
u
v
endvars
1 99 Vento U
1 99 Vento V
Note as diferenças entre este descritor de arquivo e um arquivo de descritor de grade:
registro DTYPE -- especifica um tipo de dado: station.
registro STNMAP -- dá o nome do arquivo de mapeamento da estação . Este arquivo é criado pelo
utilitário stnmap, que será descrito mais tarde.
registro XDEF, YDEF, ZDEF -- não é especificado.
registro TDEF -- descreve o intervalo do grupo de tempo e o número de grupos de tempo no arquivo.
registros VAR -- variáveis de superfície devem vir primeiro, é colocado um zero no campo do número
de níveis. Variáveis dependentes de nível são listadas após as variáveis de superfície, e é colocado um
no campo do número de níveis.
O utilitário STNMAP
Uma vez que o conjunto de dados foi escrito e o arquivo descritor criado, deve-se em seguida criar o
arquivo de mapeamento de estação usando o utilitário stnmap. Este utilitário escreve informações da
tabela misturada e/ou liga listas que permite ao GrADS acessar os dados das observações de forma
mais eficiente. O utilitário vai perguntar pelo nome do arquivo descritor de dados.
Se houver mudança nos arquivos de dados — talvez pela anexação de outro grupo de tempo — deverá
haver também mudança no arquivo descritor para refletir as mudanças — o novo número de tempos
por exemplo -- e então o utilitário stnmap deverá ser reutilizado.
Criando arquivos de dados
Esta seção descreve como criar os arquivos de dados binários para grade e dados de estação, com
exemplos de arquivos descritor de dados apropriados.
Exemplos de criação de um conjunto de dados em ponto de grade
Em uma estação de trabalho os dados binários do GrADS precisam ser criados como um conjunto de
dados stream, i.e., não deverá haver o registro normal do descritor de palavras do FORTRAN
embutidas nele. Isto pode ser feito no FORTRAN usando acesso direto I/O:
REAL
Z(72,46,16)
.
.
OPEN (8,FILE='grads.dat',FORM='UNFORMATTED',
&
ACCESS='DIRECT',RECL=72*46)
.
.
IREC=1
DO 10 I=1,18
WRITE (8,REC=IREC) ((Z(J,K,I),J=1,72),K=1,46)
IREC=IREC+1
10
CONTINUE
Este exemplo descreve 16 níveis de um variável para um arquivo com formato de acesso direto. Os
dados estão realmente sendo escritos seqüencialmente e usando acesso direto para evitar ter palavras
descritoras de registros escritas. Deve haver opções em alguns compiladores para fazer isto mais
diretamente, ou os dados podem ser escritos usando um programa em C.
30
Outro exemplo simples pode ser:
REAL X(100)
DO 10 I=1,100
X(I)=I
10 CONTINUE
OPEN (8,FILE='samp.dat',FORM='UNFORMATTED',ACCESS='DIRECT',
& RECL=100)
WRITE (8,REC=1) X
STOP
END
O arquivo descritor associado:
DSET samp.dat
TITLE Conjunto De Dados De Amostra
UNDEF -9.99E33
XDEF 100 LINEAR 1 1
YDEF 1 LINEAR 1 1
ZDEF 1 LINEAR 1 1
TDEF 1 LINEAR 1JAN2000 1DY
VARS 1
x 0 99 100 Pontos De Dados
ENDVARS
Uma vez criado, o conjunto de dados pode ser usado com funções de dados do GrADS, tal como:
display sin(x/50)
Exemplos de criação de conjuntos de dados de estação
Seja um conjunto de dados com chuva mensal:
Ano
1980
1980
1980
1980
1980
1980
1980
1980
Mes
1
1
1
1
2
2
2
2
Est
QQQ
RRR
SSS
TTT
QQQ
RRR
SSS
TTT
Lat
34.3
44.2
22.4
33.4
34.3
44.2
22.4
33.4
Lon
-85.5
-84.5
-83.5
-82.5
-85.5
-84.5
-83.5
-82.5
Chuva
123.3
87.1
412.8
23.3
145.1
871.4
223.1
45.5
Para escrever estes dados no formato do GrADS, um programa em FORTRAN na versão para DEC
pode ser:
CHARACTER*8 STID
OPEN (8,NAME='rain.ch')
OPEN (10,NAME='rain.dat',FORM='UNFORMATTED',
& RECORDTYPE='STREAM')
IFLAG = 0
C
C Le e Escreve
C
10
READ (8,9000,END=90) IYEAR,IMONTH,STID,RLAT,RLON,RVAL
9000 FORMAT (I4,3X,I2,2X,A8,3F8.1)
IF (IFLAG.EQ.0) THEN
IFLAG = 1
IYROLD = IYEAR
31
IMNOLD = IMONTH
ENDIF
C
C
C
C
Se há novo grupo de tempo, escreve um finalizador de grupo de tempo.
Assumindo nenhum grupo de tempo vazio.
C
C
C
Escreva esta observação
IF (IYROLD.NE.IYEAR.OR.IMNOLD.NE.IMONTH) THEN
NLEV = 0
WRITE (10) STID,RLAT,RLON,TIM,NLEV,NFLAG
ENDIF
IYROLD = IYEAR
IMNOLD = IMONTH
TIM = 0.0
NLEV = 1
NFLAG = 1
WRITE (10) STID,RLAT,RLON,TIM,NLEV,NFLAG
WRITE (10) RVAL
GO TO 10
C
C No fim do arquivo escreva o ultimo finalizador de grupo de tempo
C
90 CONTINUE
NLEV = 0
WRITE (10) STID,RLAT,RLON,TIM,NLEV,NFLAG
STOP
END
Para um compilador diferente, será necessário uma declaração OPEN apropriada para escrever um
conjunto de dados stream, mas esta opção é muitas vezes não disponível. Suporte para dado
seqüencial está sob consideração.
Um programa equivalente em C pode ser:
#include <stdio.h>
/* Estrutura que descreve que o cabecalho da observação em um arquivo de
estacao*/
struct rpthdr {
char id[8];
/* Caracter id da estação
*/
float lat;
/* Latitude da observação
*/
float lon;
/* Longitude da observação
*/
float t;
/* Tempo em relativa unid grid
*/
int nlev;
/* Número de níveis seguintes
*/
int flag;
/* Flag conj var indepen de nivel */
} hdr;
main () {
FILE *ifile, *ofile;
char rec[80];
int flag,year,month,yrsav,mnsav,i;
float val;
/* Abrindo Arquivos */
ifile = fopen ("rain.ch","r");
ofile = fopen ("rain.dat","wb");
if (ifile==NULL || ofile==NULL) {
printf ("Erro abrindo arquivos\n");
return;
}
/* Le, escreve e loop */
32
flag = 1;
while (fgets(rec,79,ifile)!=NULL) {
/* Conversão de formato */
sscanf (rec,"%i %i ",&year,&month);
sscanf (rec+20," %g %g %g",&hdr.lat,&hdr.lon,&val);
for (i=0; i<8; i++) hdr.id[i] = rec[i+11];
/* Time group terminator if needed */
if (flag) {
yrsav = year;
mnsav = month;
flag = 0;
}
if (yrsav!=year || mnsav!=month) {
hdr.nlev = 0;
fwrite (&hdr,sizeof(struct rpthdr), 1, ofile);
}
yrsav = year;
mnsav = month;
/* Escreve esta observação*/
hdr.nlev = 1;
hdr.flag = 1;
hdr.t = 0.0;
fwrite (&hdr,sizeof(struct rpthdr), 1, ofile);
fwrite (&val,sizeof(float), 1, ofile);
}
hdr.nlev = 0;
fwrite (&hdr,sizeof(struct rpthdr), 1, ofile);
}
Uma que vez o arquivo de dados binário foi escrito, o arquivo descritor deverá ser criado. Este poderá
ser parecido com algo como:
dset
rain.dat
dtype
station
stnmap rain.map
undef -999.0
title
Chuva
tdef
12 linear jan1980 1mo
vars
1
p 0 99 Chuva
endvars
Então, o utilitário stnmap é usado para criar o arquivo de mapeamento de estação. Assim será
possível abrir e exibir estes dados dentro do GrADS.
33
5.0 Ambiente Dimensionado
O conjunto de dados é sempre visto pelo GrADS como um vetor 4-D generalizado (5-D se incluir as
variáveis), localizado em um espaço físico (lon, lat, lev, tempo), mesmo que isto seja na realidade um
subconjunto de um espaço 4-D.
O atual ambiente dimensionado descreve com que parte dos dados ser quer trabalhar. As expressões
são avaliadas com respeito ao ambiente dimensionado (a qual permite simplicidade na sintaxe da
expressão), e a exibição final será determinada pelo ambiente dimensionado. Assim, o ambiente
dimensionado é um conceito do GrADS que é importante entender.
O ambiente dimensionado é manipulado pela entrada de um dos seguintes comandos set:
set lat|lon|lev|tempo val1 <val2 >
Este comando, atribui uma das dimensões do ambiente dimensionado usando coordenadas globais.
Alternativamente:
set x|y|z|t val1 <val2>
Este atribui uma das dimensões do ambiente dimensionado usando coordenadas de grade. A coordena
mais conveniente deve ser usada. Digitando "set lon" é equivalente a digitar "set x", ambos atribuem
um dimensão a x. A diferença está nas unidades que serão digitadas no comando.
Quando apenas um valor é digitado, esta dimensão é dita estar "fixa". Quando dois valores são
digitados, esta dimensão é dita estar "variando". A combinação de dimensões fixas e variantes
definem o ambiente dimensionado.
Exemplos:
set lon -180 0
set lat 0 90
set lev 500
set t 1
(atribui a longitude uma variação de 180W a 0).
(atribui a latitude uma variação do equador a 90N)
(atribui o nível para 500mb - uma dimensão fixa)
(atribui o tempo ao 1º. tempo no conjunto de dados — usando coordena de grade
neste caso. O tempo é agora dimensão fixa).
Quando todas as dimensões estão fixas, esta se referindo a um único ponto de dados.
Quando uma dimensão varia, esta se referindo a uma "fatia" 1-D através do conjunto de dados.
Quando duas dimensões variam, esta se referindo a uma "fatia" 2-D através do conjunto de dados.
Quando três dimensão variam, o GrADS interpreta isto como uma seqüência de fatias 2-D.
Uma nota importante: As dimensões digitadas em coordenadas de grade são sempre convertidas a
coordenadas globais. Esta conversão requer algum conhecimento de qual escala está sendo usada para
conversões de grade para globais. A escala que é usada em todos os casos (exceto um) é a escala do
arquivo padrão. A exceção existe quando uma expressão de dimensão é fornecida dentro de uma
especificação de variável, que será visto mais tarde.
34
6.0 Nomes de Variáveis
A especificação completa para o nome de uma variável é:
abbrev.file#(dimexpr,dimexpr,...) onde:
abbrev é a abreviação da variável (como especificada no arquivo descritor de dados);
file#
é o número do arquivo que contém esta variável. O padrão é o 1º. ("set dfile"
muda o padrão).
dimexpr é uma expressão de dimensão que está localmente modificando o atual ambiente
dimensionado.
Uma expressão de dimensão é usada localmente para modificar o ambiente dimensionado somente
para aquela variável. Apenas dimensões fixas podem ser assim modificadas.
Uma expressão de dimensão absoluta é:
X|Y|Z|T|LON|LAT|LEV|TEMPO = valor
Uma expressão de dimensão relativa (relativo ao corrente ambiente dimensionado):
X|Y|Z|T|LON|LAT|LEV|TEMPO +/- compensação
Exemplos de especificações de variáveis são:
z.3(lev=500)
tv.1(time-12hr)
rh
q.2(t-1,lev=850)
z(t+0)
arquivo 3, expressão de dimensão absoluta
expressão de dimensão relativa
número do arquivo padrão é usado
duas expressões de dimensão
Isto tem usos....
Uma nota importante: quando uma dimensão é digitada em unidades de grade, o GrADS sempre
converte esta para coordenadas globais. Esta conversão é feita usando a escala do arquivo padrão.
Entretanto, quando uma grade de coordena (x,y,z,t) é fornecida dentro de uma expressão de dimensão,
como parte de uma especificação da variável, a escala para aquele arquivo (i.e., o arquivo de onde
aquela variável foi tomada) é usada.
O GrADS já tem alguns nomes de variáveis "predefinidas". É possível pensar nestes como sendo
variáveis implicitamente contidas dentro de qualquer arquivo em grade aberto. Os nomes das
variáveis são:
lat
lon
lev
Quando usado, eles irão conter o lat, lon, e lev nos respectivos pontos de grade, usando a escala dos
arquivos apropriados. Pode ser especificado: lat.2 por exemplo, para obter as latitudes na grade do 2º
conjunto de dados aberto.
35
7.0 Expressões
Uma expressão do GrADS consiste de operadores, operandos e parêntesis. Para controlar a forma de
operação, os parêntesis são usados do mesmo modo como no FORTRAN.
Operadores são:
+
*
/
Adição
Subtração
Multiplicação
Divisão
Os operandos são:
especificações de variáveis, funções e constantes.
Em cada grade, as operações são realizadas com os equivalentes pontos de grade. Os valores de dados
ausentes em uma ou outra grade dão um resultado de valor de dados ausente nestes pontos de grade.
Divisão por zero obtém como resultado o valor de dado ausente neste ponto de grade.
As operações não podem ser realizadas entre grades que possuem escalas diferentes em suas
dimensões variantes — i.e., grades que possuem regras diferentes para a conversão das dimensões
variantes, de espaço de grade para espaço de coordenadas globais. Isto somente pode ser encontrado
quando as operações entre grades de arquivos diferentes que possuem regras de escalas diferentes.
Se uma grade tem mais dimensões variando que outra, a grade com menos dimensões variantes é
'expandida' e a operação é realizada.
Alguns exemplos de expressões:
z - z(t-1)
(Diferença do geopotencial no tempo)
t(lev=500)-t(lev=850)
(Diferença da temperatura entre 500 e 850)
ave(z,t=1,t=5)
(Média de z sobre os primeiro 5 tempos no arquivo)
z - ave(z,lon=0,lon=360,-b)
(Remove a media zonal)
tloop(aave(p,x=1,x=72,y=1,y=46)) (Série de tempo da média global da precip, grade 72x46)
36
8.0 Variáveis Definidas
Definindo novas variáveis
O comando define permite a criação uma nova variável. A sintaxe é:
define nome_variável = expr
A nova variável pode então ser usada em expressões subsequentes (este pode ser usado em
subsequentes comandos define ou display). A nova variável é armazenada em memória, não em
disco, assim evite definir variáveis sobre largos limites de dimensão.
A variável é definida para cobrir os limites de dimensão em efeito no tempo em que o comando é
digitado. A variável pode ser definida para ter de 0 a 4 variações de dimensão. O comando define é o
único caso dentro do GrADS onde é valido ter quatro dimensões variando.
Quando Z e/ou T tem dimensões variando, o comando define avalia a expressão, passo a passo,
através de Z e T. Em outras palavras, a expressão é avaliada dentro de um ambiente dimensionado que
tem Z e T fixos. Esta afetará a forma de como compor a expressão.
Quando uma variável definida é usada, os dados são tomados de uma variável de forma similar aos
dados tomados de um arquivos do GrADS. Por exemplo, definindo uma variável com quatro
dimensões variantes:
set lon -180 0
set lat 0 90
set lev 1000 100
set t 1 10
define temp = rh
Após o comando define, o ambiente dimensionado deverá ser retornado para um valor menor que as 4
dimensões variantes que possui!
set t 5
set lev 500
d temp
A exibição da variável definida irá mostrar uma fatia 2-D tomada no tempo 5 e no nível 500.
Se uma variável é definida com dimensões fixas, e em seguida a variável é acessada, as dimensões
fixas são tratadas como “coringas”. O melhor forma de mostrar isto está no exemplo:
set lon -180 0
set lat 0 90
set lev 500
set t 10
define zave = ave(z,t=1,t=30)
A variável definida tem duas dimensões variando. Quando está variável for exibida (ou usada em
uma expressão), as dimensões fixas da variável definida, a saber Z e T, casarão com QUALQUER
atribuição da dimensão de Z e T:
set t 1
set lev 200
d zave
37
Na exibição acima, a variável zave será mostrada como ela foi definida, i.e., será obtido uma média
no tempo do geopotencial em 500mb, ainda que o nível atribuído seja de 200.
Quando a variável definida tem dimensões variando, e tem-se um ambiente de dimensão onde a
dimensão é fixa, a dimensão apropriada é recuperada da variável:
set lon -180 0
set lat 0 90
set lev 500
set t 10
defina temp = z
set lat 40
d temp
No exemplo acima, a variável definida tem a dimensão de Y variante. Fixando a dimensão Y para ser
40N, será exibido uma fatia 1-D dos dados. Serão acessados os dados de 40N na grade definida.
Agora digitando:
set lat -40
d temp
Os dados de 40S serão acessados da variável definida. Sendo que estes estão além das dimensões
originalmente usadas quando a variável foi definida, os dados serão atribuídos como indefinidos.
É possível também, localmente, sobrepor ao ambiente dimensionado:
d temp(lat=50)
Se esta dimensão é uma dimensão variante dentro da variável definida. Se a dimensão é uma
dimensão fixa para esta variável, a local que esta sobrepondo será ignorada:
d temp(t=15)
No comando acima, a variável definida de temp tem T fixo, assim o t=15 será ignorado.
Nota: o comando define atualmente suporta somente grades.
Uma vez que tenha sido definido uma variável de grade, pode ser dito ao GrADS que a nova variável
é climatológica, i.e., a dimensão do tempo da nova variável pode ser tratada num sentido de
“coringa”.
O comando é:
modify nome_variável
<seasonal>
<diurnal>
onde o nome da variável é o nome da grade definida (o comando define deverá ter sido previamente
usado). Se a grade é descrita como seasonal, então é assumido que a grade contem médias mensais
(ou multi mês). Note que médias diárias ou multi dia ainda não são suportadas. Se diurnal for
especificado, é assumido que a variável definida contem médias sobre algum período de tempo menor
que um dia.
Após descrever a variável definida como climatológica, então as datas/tempos serão tratadas
apropriadamente quando os dados forem acessados da variável definida.
38
Um exemplo. O conjunto de dados contém 10 anos de médias mensais:
set lon -180 180
set lat -90 90
set lev 500
set t 1 12
define zave = ave(z,t+0,t=120,1yr)
Esta definição irá montar uma variável chamada zave que contém 12 tempos, cada tempo sendo a
média de 10 anos para aquele mês. Aqui está sendo feito uso do fato que o comando define “laça”
através de uma dimensão de variação de tempo quando está avaliando a expressão, e dentro da função
ave é feito o uso de um compensador de tempo da variável t+0, o qual usa um tempo inicial que é
qualquer tempo que o comando define esteja usando como estes “laço”.
modifique zave sazonal
set t 120
d z - zave
A exibição final removerá a média mensal de 10 anos para Dezembro do último Dezembro no
conjunto de dados.
Indefinindo novas variáveis
Cada variável definida usando o de comando define reserva alguma memória do sistema. Se não
houver nenhuma necessidade por um tempo maior de uma variável definida, é sensato liberar esta
memória para outro uso. Isto é efetuado com o comando undefine. Por exemplo:
undefine p
irá liberar a memória usada para definir a variável p. Certamente, a variável p não estará avaliável
para o processamento no GrADS.
39
9.0 Exibindo a Plotagem de Dados
Exibindo os dados
O comando display é utilizado para fazer a plotagem dos dados (expressões de saída) via janela de
saída gráfica. O comando é:
display expressão
ou
d expressão
A mais simples expressão é uma abreviação de variável.
Quando todas as dimensões estão fixas, um único valor é obtido na janela de comandos.
Quando uma dimensão varia, uma linha gráfica 1-D pelo padrão é obtida.
Quando duas dimensões variam, uma plotagem de contorno em 2-D pelo padrão é obtida.
Uma variedade de tipos de plotagem estão disponíveis além dos padrões acima. Escolher estes é o
assunto do próximo capítulo.
Limpando a janela gráfica
O GrADS irá sobrepor a saída de cada comando de exibição. Para limpar a tela gráfica, entre:
clear (ou somente c)
Digitando sem os parâmetros, o comando clear faz uma linda forte e devida limpeza de muitas
atribuições internas do GrADS. Alguns parâmetros podem contribuir para limitar o que será limpado
quando recursos mais avançados forem usados, por exemplo:
c events
c graphics
c hbuff
limpa os eventos do buffer (i.e., cliques do mouse)
limpa os gráficos, mas não os widgets
limpa a exibição do buffer quando no modo de buffer duplo
CUIDADO: Se acontecer algum erro na sintaxe do clear então o GrADS fará o clear total...
40
10.0 Tipos de Saídas Gráficas
Antes da exibição de um gráfico, é necessário atribuir o tipo de plotagem, provavelmente, alguns
outros parâmetros gráficos também.
Pelo padrão, quando uma dimensão varia, um gráfico de linha é obtido e, quando duas dimensões
variam, uma plotagem em contorno é obtida. Estes padrões podem ser modificados pelo comando:
set gxout tipo_de_gráfico
alguns exemplos de tipo_de_gráfico são:
contour:
shaded:
grfill:
grid:
vector:
stream:
bar:
line:
barb:
fgrid:
linefill:
stat:
Plotagem de contorno
Plotagem de contorno sombreado
Igual ao sombreado exceto que cada caixa de grade é preenchida
Caixas de grade com valores
Flechas do vetor de vento
Linhas de corrente
Gráfico de barra
Gráfico de linha
Barbelas de vento
Caixas de grade preenchidas de valores especificados usando set fgvals....
Preenche com cor entre duas linhas
Envia a saída para o terminal em vez de plotar
para dados de estação:
value:
Valores de estação
barb:
Barbelas de vento
wxsym:Símbolos do Wx
findstn:
Encontra a estação mais próxima (ver a linguagem de scripts)
stat:
Envia a saída para o terminal em vez de plotar
Há muitas opções que podem ser atribuídas para controlar como o tipo_de_gráfico será exibido.
Estes e outros tipos de gráficos são abordados em detalhes no Capítulo 19 Opções Gráficas.
Para os tipos de saídas gráficas de vetor, linhas de corrente e barbelas, as rotinas de exibição
necessitam de duas grades, onde a 1ª grade é tratada como a componente U, e a 2ª grade é tratada
como a componente V. Para obter duas grades, duas expressões serão digitadas no comando de
exibição separadas por um ponto e vírgula:
display u ; v
display ave(u,t=1,t=10) ; ave(v,t=1,t=10)
Para os tipos de vetor e corrente, pode ser especificado uma 3ª grade que será utilizada para colorir os
vetores ou as linhas de corrente:
d u;v;hcurl(u,v)
d u;v;mag(u,v)
41
Para um gxout de wxsym, cada valor em uma localização de estação é assumido ser um número do
código de símbolo do wx. Furacões e símbolos de tempestade tropicais estão incluídos no conjunto de
símbolos.
draw wxsym símbolo x y tamanho <cor <espessura >>
Desenha o especificado símbolo wx na localização especificada, onde:
símbolo
x
y
size
color
espessura
- é um inteiro especificando que símbolo será desenhado
- localização x, em polegadas
- localização y
- tamanho do símbolo (rudemente)
- cor do símbolo. Use -1 para obter cores padronizadas (vermelho para tempestade,
azul para neve, etc.)
- espessura da linha do símbolo
Para ver que símbolos estão disponíveis, inicie no grads, então:
run wxsym.gs
deve ser verificado neste script como foi editado o comando wxsym.
42
11.0 Animação
Uma seqüência de animação é obtida para exibições realizadas quando há 3 dimensões variando. A
animação pode ser conseguida através de qualquer uma das três dimensões variantes.
Pelo padrão, a dimensão de animação é o tempo. A dimensão de animação é atribuída através de:
set loopdim x|y|z|t
A animação pode ser feita quando menor que três dimensões estão variando (i.e., animar um gráfico
de linha), o controle da animação pode ser feito digitando:
set looping on|off
A atribuição para set looping off após a animação deverá ser feita antes de digitar sua próxima
expressão!
43
12.0 Controle de Página
Páginas virtuais e reais
O número e o tamanho da plotagem pode ser controlado na pagina "real" definindo uma ou mais
páginas "virtuais". O comando a ser usado é:
set vpage xmin xmax ymin ymax
Este comando define uma "página virtual" que se ajusta dentro dos limites específicos da página real.
Todas as saídas gráficas serão desenhadas dentro desta "página virtual" até que outro comando 'set
vpage' seja digitado. Um comando clear limpa a página física (e quaisquer páginas virtuais
desenhadas neste).
Quando o GrADS é iniciado, ele pergunta pelo modo paisagem ou retrato. Este define o tamanho da
página real (11x8.5 ou 8.5x11). As dimensões da página virtual devem ser encaixadas dentro da
página real.
O comando 'set vpage' definirá os limites da página virtual em termos de polegadas (polegadas de
página virtual), as quais são as coordenadas que serão usadas nos vários comandos que requerem
polegadas para serem usadas. Os novos limites de página são impressos quando o comando 'set vpage'
é completado.
Para voltar ao estado padrão onde as página reais e virtual são iguais, digite:
set vpage off
Controlando a área de plotagem
Para controlar a área dentro da página virtual que o GrADS plota, use:
set parea xmin xmax ymin ymax
<off>
O comando especifica a área para plotagem de contorno, mapas, ou gráficos de linha. Esta área não
inclui os rótulos dos eixos, títulos, etc., assim se precisar vê-los, forneça uma margem adequada.
A região está especificada em termos de unidades de página virtual. Pelo padrão, a página virtual é
igual à página real, assim na página real as unidades são aproximadamente polegadas.
Os mapas são escalados para se encaixarem dentro da área de plotagem desde que sua correta razão de
aspecto seja mantida. Assim, o mapa não encherá inteiramente a área de plotagem, exceto sob certos
limites de lat/lon. Um gráfico de linha ou uma plotagem de contorno sem um mapa será escalado para
se encaixar inteiramente dentro da especificada área do plotagem.
Pelo padrão, uma apropriada área de plotagem é escolhida dependendo do tipo de saída gráfica. Para
voltar para este padrão, digite:
set parea off
Este comando não é apropriado para colocar múltiplas plotagens em uma mesma página. Para isto é
melhor usar o comando ‘set vpage'.
44
13.0 Gráficos de Primitivas
Vários comandos são fornecidos para permitir o controle e exibição de vários gráficos de primitivas:
Estes acentuam a forma de plotagem dos dados por serem somados ao tradicional "trabalho de arte".
Alternativamente, estes comandos podem ser usados para criar, por exemplo, um diagrama de base de
mapas com nenhuma plotagem de dados envolvida.
Comandos de desenho
draw map
Desenha a delineação de mapa controlado pelas correntes atribuições e pela dimensão do
ambiente.
draw xale conjunto_de_caracteres
ylab
Escreve um conjunto_de_caracteres na posição apropriada para rotulação dos eixos x e y.
draw string x y conjunto_de_caracteres
Desenha um conjunto_de_caracteres na posição x,y. x e y são medidos em polegadas na
página virtual. O conjunto de caracteres é desenhado usando o atual atributo de caracteres —
veja os comandos "set string" e "set strsiz".
draw line x1 y1 x2 y2
Desenha uma linha de x1, y1 para x2, y2 usando o atual atributo de desenho de linha. Veja o
comando "set line".
draw rec xlo ylo xhi yhi
Desenha o contorno de um retângulo de xlo, ylo ao xhi, ylo ao xhi, yhi ao xlo, yhi ao xlo, ylo.
O retângulo é desenhado usando os corrente atributos de desenho de linha.
draw recf xlo ylo xhi yhi
Desenha um retângulo fechado na área descrita por xlo, ylo, xhi, yhi. A cor do quadrado é a
atual cor do atributo de desenho de linha.
draw mark marca x y tamanho
Desenha uma marca de requisitado tamanho na posição x, y. Os tipos de marcadores são:
1-x
2 – contorno de círculo
3 – círculo fechado
4 – contorno de quadrado
5 - quadrado fechado
draw polyf x1 y1 x2 y2 x3 y3 .... xn yn
Desenhe um polígono entre uma série de pontos x,y. O polígono é ligado pelas coordenadas e
preenchido quando xn = x1 e yn = y1. Set line controla a cor.
45
Controlando os comandos de desenho
Os seguintes comandos especificam vários aspectos do modo como o comando draw trabalha.
set font número onde: número = 0 ... 5
Seleciona a fonte para operações de texto subsequentes.
set line cor <estilo> <espessura >
Estabelece atributos de linha atuais.
cores são:
0 - preto
1 - branco
2 - vermelho
3 - verde
4 - azul
5 - ciano
6 - magenta
7 - amarelo
8 - laranja
15 - cinza
estilos são:
1 - sólido
5 - ponto
2 - tracejado longo
6 - ponto traço
3 - tracejado curto
7 – ponto ponto traço
4 - tracejado curto, longo
Os valores de espessura variam de 1 a 6, e fornecem várias espessuras de linha em saída de
impressão a laser
set string cor <justificação <espessura <rotação>>>
Atribui certos atributos de desenho de caracteres. A cor está descrita acima. Justificação é a
justificação do conjunto de caracteres, ou como o conjunto de caracteres será plotado com
respeito a posição x,y dado no comando "draw line". Os códigos apropriados estão referidos na
seguinte gravura:
tl
tc
tr
tl – topo esquerda
+-------------+--------------+
tc – topo centro
|
tr – topo direita
l +
|
+ c
+ r
|
etc.
|
+-------------+--------------+
bl
bc
br
A opção de rotação especifica a rotação que o desejado conjunto de caracteres terá em graus.
Quando rodado, o centro de rotação é o ponto de justificação. A rotação é realizada no sentido
horário.
set strsiz hsiz <vsiz>
Este comando atribui o tamanho do caracter, onde hsiz é a largura dos caracteres, vsiz é a altura
dos caracteres, em polegadas de página virtual. Se vsiz não for especificado, será atribuído o
mesmo valor como hsiz.
46
set rgb número vermelho verde azul
Definirá novas cores no GrADS, e designa a estes um novo número de cor. Este novo número
de cor pode então ser usado dentro de qualquer comando do GrADS que necessita um número
de cor, tal como "set ccols".
A cor do número deve ser um valor entre 16 e 99 (0 e 15 são predefinidos). Os valores
vermelho, verde, e azul devem estar entre 0 e 255. Por exemplo:
set rgb 50 255 255 255
Definirá um novo número de cor, 50, e designará uma cor neste. Neste caso, a cor será branca.
O tradutor gxps usará os novos valores de cores embora a saída colorida terá que ser checada
para a desejada tradução. O gxps não irá traduzir diretamente as novas cores dentro de uma
escala de cinza — a não ser que, este traduzirá somente a intensidade de verde dentro de um
novo valor de escala de cinza. Note que o gxps tem um mapeamento predefinido de valores de
cores de 0 a 15 tal que o predefinido efeito de cor "arco-íris" seja traduzido como uma
agradável graduação de tons de cinza, o qual não pode ser feito para recentes cores definidas.
Plotagem em uma área específica
Pode ser especificado uma área específica para o desenho de gráficos de primitivas tais como linhas e
conjuntos de caracteres. Quando o comando de exibição for acionado, o GrADS atribui a região de
área específica para o parea, desenha o gráfico, então atribui a região da área específica para toda
pagina. Mesmo que se tenha atribuído a região de uma área específica, o comando de exibição
reinicializará este para toda pagina. Para anexar a exibição de vários comandos de desenho:
set clip xlo xhi ylo yhi
onde xlo,xhi,ylo,yhi são coordenadas da área específica em polegadas de página reais.
47
14.0 Saída de Impressão
Produzindo um arquivo de impressão no GrADS
Para fazer a saída de impressão, primeiro o seguinte comando deve ser digitado:
enable print nome-arquivo
Isto habilita o comando print e direciona o comando de saída de impressão ao arquivo dado.
Quaisquer conteúdos já existentes neste arquivo serão perdidos.
Quando o gráfico na tela estiver pronto entre o comando:
print
Este copiará as instruções do vetor usado para criar a atual exibição, para dentro do arquivo de saída
no formato metacode do GrADS
O arquivo de saída pode ser fechado por sair do GrADS (comando quit), pelo comando reinit, ou
pelo:
disable print
Imprimindo um arquivo de impressão no GrADS
Uma vez que o arquivo de saída foi fechado, os comandos de metacode dentro deste deverão ser
traduzidos ao desejado formato. O utilitário gxps foi fornecido para isto. Este utilitário não pode ser
usado dentro do ambiente de comandos do GrADS, este deverá ser usado na linha de comandos do
UNIX.
gxps - Traduz para postscript monocromático (fundo branco). O padrão de cores de arco-íris do
GrADS (cores de números 2 a 14) são traduzidos dentro de agradáveis valores de tons de cinza.
As cores definidas pelo usuário (números acima de 15) serão traduzidas para intensidade de
tons de cinza com base somente em seu conteúdo verde.
O utilitário gxps converte arquivos meta gráficos do GrADS (quando "impressos" no
GrADS) para postscript. Isto soluciona todos os problemas de conversões em um utilitário
usando as opções de linha de comando:
-c
-r
-i nome-arq
-o nome-arq
-d
HP1200C/PS
colorido com fundo branco (=velho gxpscw)
colorido com fundo preto (=velho gxpsc)
onde nome-arq é o nome do arquivo meta do GrADS de entrada
onde nome-arq é o nome do arquivo ps de saída
adiciona um ctrl-d no final do arquivo, útil para impressora colorida
O utilitário gxps perguntará por ambos: o nome do arquivo de entrada e do arquivo de saída. O nome
do arquivo de entrada será o arquivo criado pelo comando enable print. O nome do arquivo de saída
poderá ser um nome qualquer. Qualquer arquivo existente com este nome será apagado. Uma vez que
o arquivo de saída foi criado, poderá ser impresso usando os comandos de impressão do UNIX. O
padrão é uma plotagem em preto e branco.
48
15.0 O Comando EXEC
O comando exec é usado para executar uma seqüência de comandos do GrADS a partir de um
arquivo. Se o comando clear for encontrado, o GrADS espera até que o enter seja pressionado antes
de limpar e continuar com o processamento dos comandos.
O comando é:
exec nome-arquivo <arg0 arg1 ... arg9 >
onde: nome-arquivo é o nome de um arquivo contendo os comandos do GrADS.
As variáveis de &0 a &9 podem ser usadas dentro do arquivo exec para serem substituídas pelo
argumentos delimitados por espaços em branco.
49
16.0 Usando Dados de Estação
Os dados de estação também são suportados no GrADS em um limitado grau. Dados de estação
consistem em pontos de dados distribuídos essencialmente e aleatoriamente dentro das quatro
dimensões.
Operando com dados de estação
Atualmente, operações e exibições dos dados de estação são suportados por três dimensões de
ambientes distintos:
• X,Y variando ( plotagem horizontal X,Y)
• Z variando ( perfil vertical)
• T variando ( série do tempo)
As operações podem ser feitas em dados de estação como em dados em grade. As operações entre
grades e dados de estação não são suportados.
As operações entre dados de estação são definidos como sendo a operação desempenhada em pontos
de dados que tem exatamente os mesmos valores de dimensão variando.
Por exemplo, se T é a única dimensão variando, a expressão:
d ts-ds
resultará em uma série de tempo de observações de dados de estação sendo restabelecida por duas
variáveis separadas. Então para observações de estação que tem o mesmo tempo, a operação é
realizada. Note que os valores duplicados serão ignorados, com a operação sendo realizada entre as
primeiras ocorrências encontradas
Quando X e Y são dimensões fixas, a especificação da variável pode incluir um identificador da
estação, o qual especifica um local coberto por ambos lat e lon.
A sintaxe deste será:
varname(stid=ident)
Os identificadores de estação são casos insensíveis.
Algumas funções não suportam os tipos de dados de estação. Estas são:
hdivg
hcurl
vint
maskout ave
aave
tloop
Quando X e Y estão variando, os valores dos dados de estação são exibidos como números centrados
em suas localizações. Se duas expressões são fornecidas no comando de exibição (i.e., d ts;ds) então
dois valores são exibidos, acima e baixo da localização da estação. A exibição é controlada pelos
seguintes comandos de atribuição:
set ccolor cor
set dignum dígitos
set digsiz tamanho
set stid on|off
O comando 'set stid' controla se o identificador da estação será exibido com cada valor.
50
Modelos de Estação
O GrADS plotará os modelos de estação para dados de estação. Isto é possibilitado por:
set gxout model
O comando de exibição apropriado é:
d u;v;t;d;slp;delta;cld;wx;vis
onde:
u e v são as componentes do vento. Uma barbela de vento será plotada usando esses valores. Se
um ou outro dado estiver faltando, o modelo de estação não irá plotá-lo de qualquer modo.
t, d, slp, e delta são plotados numericamente ao redor do modelo de estação:
t slp
vis wx O delta
d
cld é o valor do símbolo desejado no centro do modelo de estação. Os valores de 1 a 9 são
considerados do tipo marca (i.e., círculo, quadrado, cruz, etc.). Os valores de 20 a 25 são
considerados valores de nebulosidade:
20 -claro
21 -espalhado
22 -quebrado
23 -nublado
24 -obscurecido
25 -ausente (M é plotado)
wx é o valor do símbolo wx (veja ' plot wxsym ') para ser plotado na localização wx.
vis é a visibilidade como um número real. Este será plotado como um número inteiro e uma
fração.
Quando qualquer um destes itens estiver ausente (outro que u e v), o modelo será plotado sem estes
elementos. Para representar um valor ausente globalmente, entre uma constante no comando de
exibição. Por exemplo, se o delta estiver sempre ausente, use:
d u;v;t;d;slp;0.0;cld
Os modelos de estação respondem aos usuais comandos de atribuição tais como ‘set digsiz', 'set
dignum’ 'set cthick', 'set ccolor’.
Complementando, há:
set stnopts <dig3> <nodig3 >
o qual causará ao modelo plotar o número com três dígitos na localização de slp, com somente os três
últimos dígitos do número todo plotado. Isto permite o padrão de 3 dígitos para a pressão ao nível do
mar ser plotado através da habilitação de 'dig3' e plotando slp*10.
51
17.0 Introdução aos Scripts do GrADS
Os scripts oferecem aos usuários algumas facilidades ao programar as operações do GrADS. Embora
seja relativamente fácil aos usuários produzirem gráficos sofisticados no GrADS sem jamais terem
escrito um script, há ocasiões onde a capacidade de programação torna as coisas até mesmo mais
fáceis. Este capítulo explica as capacidades gerais dos scripts, o que fazer para iniciá-los e sugere uma
estratégia aos usuários que desejam escrever seus próprios scripts.
O que os scripts podem fazer
A linguagem de script do GrADS, usada via o comando run, fornece uma capacidade semelhante ao
comando exec, exceto que um script pode ter variáveis, controle de fluxo e acessa os comandos de
saída do GrADS. Os scripts podem ser escritos para desempenhar uma variedade de funções, tal como
permitir a um usuário, através do clique do mouse na tela gráfica, selecionar alguma coisa, animar
quaisquer quantidades desejadas, anotar plotagens com a informação obtida dos comandos query do
GrADS.
A documentação completa da linguagem de scripts está no Capítulo 23 Programando no GrADS:
Usando a Linguagem de Scripts. Antes de tentar escrever seus próprios scripts é recomendado a
leitura do restante deste capítulo e então deve-se usar alguns scripts fornecidos (como os listados no
Apêndice A). Estudando os scripts de exemplo, referidos no Capítulo 23 para informação sobre
sintaxe, etc., o usuário já estará preparado para escrever seus próprios scripts.
Executando os scripts
O comando para executar um script é o comando run:
run nome-arquivo opções
onde: nome-arquivo = *.gs
Este comando executa o script contido no arquivo especificado.
Executando automaticamente um script
Um simples script pode ser executado automaticamente antes de todo comando de exibição:
set imprun nome-script
Este script será tipicamente usado para atribuir uma opção que, pelo padrão, é reinicializada após cada
comando de exibição, por exemplo:
'set grads off'
Qualquer comando do GrADS pode ser escrito neste script, mas as interações não são sempre boas.
Por exemplo, um comando display neste script, poderá facilmente entrar num laço recursivo infinito.
O argumento para este script é a expressão do comando de exibição.
52
Armazenando scripts do GrADS
Pode ser conveniente colocar todo os scripts "utilitários" do GrADS, tais como cbarn.gs e font.gs,
num diretório (i.e., /usr/local/grads/lib/scripts).
Para simplificar a execução desses scripts, primeiro o GrADS procura o script no diretório atual e
então, se ele não puder encontra-lo, anexa o ".gs" a extensão e tenta novamente. Por exemplo,
suponha um script de teste chamado t.gs. Este será executado por,
run t
Se após às duas primeiras tentativas o script ainda não puder ser localizado, então o GrADS procura
no diretório definido pela variável de ambiente GASCRP. No t (csh), por exemplo,
setenv GASCRP /home1/grads/lib
ou no ksh,
export GASCRP=/home1/grads/lib
Note que se a / não está presente no final do nome do diretório, este é automaticamente anexado pelo
UNIX. Entretanto, poderá ainda ser usado,
setenv GASCRP /home1/grads/lib/
Se o script não puder ser encontrado, então o .gs será anexado e o GrADS tentará novamente. Assim,
d slp
run /home1/grads/lib/cbarn.gs
pode ser simplificado para,
d slp
run cbarn
53
18.0 Facilidades adicionais
Comandos do shell
Precedido por um ponto de exclamação, os comandos do shell podem ser digitados na linha de
comando do GrADS:
ga> !ls -l /dados/wx/grads
A saída do comando, a menos que redirecionada, aparecerá em seu console. Os comandos do shell
podem ser executados via script ou exec; mas a saída do comando não será retornado ao script através
da variável result.
Opções de linha de comando nos utilitários do GrADS
Nomes de arquivos podem ser especificados na linha de comando dos utilitários do GrADS:
ga> !stnmap -i nome-descritor
ga> !gxps -i nome-arquivo-meta -o nome-arquivo-ps
Reinicializando o GrADS
Dois comandos foram desenvolvidos para restabelecer ou reinicializar o estado do GrADS:
reset : Este comando inicializa o GrADS para seu estado inicial com as seguintes exceções:
1) Nenhum arquivo é fechado
2) Nenhum objeto definido é liberado
3) As atribuições de ‘set display' não são modificadas
Se os arquivos estão abertos, o arquivo padrão é atribuído para o 1, e o ambiente de dimensão é
atribuído para variações de X, Y e Z e T são atribuídos para 1. (como se o arquivo 1 fosse
somente o único aberto).
reset pode restabelecer somente certas partes do GrADS para seu estado inicial usando os
seguintes parâmetros:
reset events
reset gráficos
reset hbuff
reset norset
restabelece o eventos do buffer (i.e., cliques dos mouse)
restabelece os gráficos, mas não os widgets
restabelece o buffer de exibição quando em modo de buffer duplo
restabelece somente os eventos de X
reinit: Este comando faz o mesmo que o reset, e em adição fecha todos os arquivos abertos e
libera todos os objetos definidos. Isto essencialmente volta o GrADS para seu estado inicial.
54
Exibindo os metafiles do GrADS
Um metafile do GrADS é o arquivo criado com o comando print o qual contém as instruções para
recriar a plotagem em um dispositivo de saída, tal como tela ou impressora.
gxtran.exe é usado para exibir os metafiles do GrADS. Várias opções de linha de comando estão
disponíveis:
-i nomearq
nomearq é o nome do arquivo meta;
-r
plotagem em fundo preto;
-g
WWWWxHHHH+X+Y
-a
Este é mesmo como a opção de linha de comando no GrADS e permite atribuir a geometria
da janela gráfica como usado em qualquer outro aplicativo X. A única diferença é o espaço
entre -g e WWWW. A janela de exibição terá WWWW pixels de largura e HHHH pixels de
altura começando no X e Y na tela.
anima os quadros, i.e., não faz pausa entre os quadros até o usuário teclar enter na janela de
comando.
Por exemplo,
gxtran -r -a -g 800x600+0 -i test.gm
abrirá uma janela de 800x600 iniciando no canto alto esquerdo da tela e animará todos os quadros
(plotagens) no arquivo test.gm usando o fundo de tela reverso.
55
Seção de Referência
56
19.0 Opções Gráficas
As opções gráficas controlam os modos e formatos das saídas gráficas. Algumas das opções são
válidas para a maioria dos tipos de saídas gráficas, algumas são válidas somente para um.
Algumas das opções se "fixam" até serem modificadas. Outras permanecem as mesmas até que um
comando clear seja encontrado, e ainda outras são retornadas para seus padrões ou por um comando
clear ou por um comando display.
Gráficos 1-D
Gráficos de linha (gxout = line):
set ccolor cor - Atribui cor a linha. Retorna ao padrão pelo clear ou display, onde:
0 - preto
5 - ciano
10 - amarelo/verde
15 - cinza
1 - branco
6 - magenta
11 - azul médio
2 - vermelho
7 - amarelo
12 - amarelo escuro
3 - verde
8 - laranja
13 - aqua
4 - azul
9 - roxo
14 - roxo escuro
set cthick espessura - Atribui a espessura de uma linha aos contornos dado um inteiro no limite de
1 a 10 representando as espessuras de linhas relativas. Espessura de 6 ou mais será mais espessa
na tela. Primeiramente usado para controlar a saída de impressão.
set cstyle estilo - Atribui estilo de linha. Retorna ao padrão pelo clear ou display.
set cmark marca - Atribui um marcador de linha:
0 - nenhum
1 - cruz
2 - círculo aberto
3 - círculo fechado
4 - quadrado aberto
5 - quadrado fechado
6-X
7 - diamante
8 - triângulo
9 - nenhum
10 - círculo aberto com linha vertical
11 - oval aberta
Retorna ao padrão pelo clear ou display
set missconn on - Pelo padrão, quando o GrADS plota um gráfico de linha, os dados ausentes são
indicados por uma 'quebra' na linha. Este comando conecta as linhas através dos dados
ausentes.
set missconn off - Retorna ao comportamento padrão
Gráficos de Barra (gxout = bar)
set bargap val - Atribui o intervalo entre as barras em percentagem. val deverá limitar de 0 a 100.
O padrão é 0, ou sem espaço. Um valor de 100 dá uma linha vertical única para cada barra.
set barbase val| bottom|top - Se val for dado, cada barra ascende ou desce a partir deste valor,
assumindo que o valor está dentro do limite do plotador. Se bottom for especificado, cada barra
ascende de baixo para cima da plotagem. Se top for especificado, cada barra desce de cima para
baixo na plotagem.
set baropts opts
57
onde:
opts =
outline
não preenche a barra
filled
preenche a barra
set ccolor cor - Atribui cor a linha. Retorna ao padrão pelo clear ou display, onde:
0 - preto
5 – ciano
10 - amarelo/verde
15 - cinza
1 - branco
6 - magenta 11 - azul médio
2 - vermelho
7 - amarelo
12 - amarelo escuro
3 - verde
8 - laranja
13 - aqua
4 - azul
9 - roxo
14 - roxo escuro
set cthick espessura - Atribui a espessura de uma linha aos contornos dado um inteiro no limite de
1 a 10 representando as espessuras de linhas relativas. Espessura de 6 ou mais será mais espessa
na tela. Primeiramente usado para controlar a saída de impressão.
Barras de Erro (gxout = errbar)
set ccolor cor - Atribui cor a linha. Retorna ao padrão pelo clear ou display, onde:
0 - preto
5 – ciano
10 - amarelo/verde
15 - cinza
1 - branco
6 - magenta 11 - azul médio
2 - vermelho
7 - amarelo
12 - amarelo escuro
3 - verde
8 - laranja
13 - aqua
4 - azul
9 - roxo
14 - roxo escuro
set cthick espessura - Atribui a espessura de uma linha aos contornos dado um inteiro no limite de
1 a 10 representando as espessuras de linhas relativas. Espessura de 6 ou mais será mais espessa
na tela. Primeiramente usado para controlar a saída de impressão.
set bargap val - Atribui o intervalo entre as barras em percentagem. val deverá limitar de 0 a 100.
O padrão é 0, ou sem espaço. Um valor de 100 dá uma linha vertical única para cada barra.
set barbase val| bottom|top - Se val for dado, cada barra ascende ou desce a partir deste valor,
assumindo que o valor está dentro do limite do plotador. Se bottom for especificado, cada barra
ascende de baixo para cima da plotagem. Se top for especificado, cada barra desce de cima para
baixo na plotagem.
Gráfico de Linha Sombreada (gxout = linefill)
set lfcols 1 2
d a;b
Colore onde a < b em branco (1) e b > a em vermelho (2)
Gráficos em Grade 2-D
Plotando em Linhas de Contorno (gxout = contorno)
set ccolor cor - Atribui a cor do contorno, onde cor é um número especificado por:
0 - preto
1 - branco
2 - vermelho
3 - verde
4 - azul
5 - ciano
6 - magenta
7 - amarelo
8 - laranja
9 - roxo
10 - amarelo/verde
11 - azul médio
12 - amarelo escuro
13 - aqua
14 - roxo escuro
15 - cinza
Retorna ao padrão pelo comando clear ou display
Pode também ser escolhido:
set ccolor rainbow - para obter a seqüência do cores do arco-íris.
58
set ccolor revrain - usa a seqüência inversa do arco-íris, complementa set ccolor rainbow
set cthick espessura - Atribui a espessura de uma linha aos contornos dado um inteiro no limite de
1 a 10 representando as espessuras de linhas relativas. Espessura de 6 ou mais será mais espessa
na tela. Primeiramente usado para controlar a saída de impressão.
set cstyle estilo - Atribui os estilo de linha de contorno:
Os números dos estilos são:
1 - sólido
2 - traço longo
3 - traço curto
5 - pontos
Retorna ao padrão pelo clear ou display
set cterp on|off - coloca o suavizador spline em on ou off. Permanece até uma nova atribuição. Os
contornos sombreados são plotados sem ajuste spline, assim para assegurar uma exata
comparação quando sobrepor o contorno de linha e os contornos sombreados do mesmo campo,
especifique cterp como off. Pode ainda ser usado a opção 'csmooth', que afeta ambos, o
contorno de linha e o contorno sombreado.
set cint valor - Atribui o intervalo de contorno ao valor especificado. Retorna ao padrão pelo clear
ou display.
set cmin valor - Os contornos não são plotados abaixo deste valor. Retorna ao padrão pelo c ou d.
set cmax valor - Os contornos não são plotados acima deste valor. Retorna ao padrão pelo c ou d.
set black off/val1 val2 - Os contornos não são plotados dentro deste intervalo. Retorna ao padrão
pelo clear ou display.
set clevs lev1 lev2 - Atribui especificados níveis de contorno. Retorna ao padrão pelo c ou d.
set ccols col1 col2 - Atribui especificadas cores aos níveis do clev. Retorna ao padrão pelo clear
ou display (Nota: A seqüência do arco-íris é: 9, 14, 4, 11, 5, 13, 3, 10, 7, 12, 8, 2, 6)
set rbrange baixo alto - Atribui um limite de valores que serão usados para determinar quais irão
adquir a cor arco-íris. Pelo padrão, são atribuídos ao baixo e ao alto o resultado de min e max
da grade. Retorna ao padrão pelo comando clear.
set rbcols cor1 cor2 <cor3> ...
<auto>
Especifica um nova seqüência de cor 'rainbow'. Os números das cores podem ser as novas
cores definidas via o comando ‘set rgb'. Essas cores substituem a seqüência de cores do arcoíris padrão quaisquer que sejam as seqüências de cores arco-íris usadas. Quando utilizar 'set
rbcols auto' a construída seqüência de arco-íris é usada. Este se ‘fixa’ até um novo comando.
set clopts cor <espessura <tamanho>>>
onde:
cor - é a cor do rótulo. -1 é o padrão, e indica o uso das cores de linhas de contorno como as
cores de rótulo
espessura - é a espessura do rótulo. -1 é o padrão.
tamanho - é o tamanho do rótulo. 0.09 é o padrão.
Permanece atribuído até ser mudada pelo uso de outro comando 'set clopts'.
set csmooth on| off | linear - Se on, a grade é interpolada para uma grade mais fina usando
interpolação cúbica antes de traçar os contornos. Fixa-se até um novo comando.
Note: esta opção resultará em valores de contorno abaixo e acima do min e max da grade
interpolada. Este pode fisicamente resultar em valores inválidos tal como no caso de chuva
negativa. O problema pode ser evitado usando o set csmooth linear, que usa interpolação
linear para criar a grade mais fina.
59
set clab on|off|forced|string|auto - Controla a rotulação do contorno. Se "fixa" até um novo
comando.
on
- indica o contorno de rótulo ‘rápido’. Os rótulos são plotados onde a linha de
contorno é horizontal.
off
- nenhum rótulo de contorno
forced
- é feito uma tentativa de rotular todas linhas de contorno
string
- especifica um modelo de 'substituição' para conversão do valor de contorno para
caracter.
Esta conversão é feita pela chamada de uma rotina da biblioteca da linguagem C 'sprintf'. O
comando man do UNIX pode ser usado para printf (na estações DEC, faça 'man 3s printf')
para obter informações de como esta substituição trabalha.
Note que um único número em ponto flutuante está sendo passado à rotina do sprintf para
cada uso do conjunto de caracter de substituição.
O resultado desta substituição é então passado ao sistema plotador de caracter do GrADS.
Os controles de fonte também são passados, assim é possível incluir um comando de
controle de fonte do GrADS em seu caracter de substituição.
Padrão: set clab auto
Um caracter de substituição de %g deve ser usado
Exemplo:
set clab %gK
Coloca um K no fim de cada rótulo
set clab %g%%
Coloca um sinal de porcentagem no final
set clab %.2f
Coloca dois dígitos após o ponto decimal em cada rótulo
set clab %03.0f
Plota cada valor de contorno como um inteiro de 3 de dígitos
começando por zero
set clab Foo
Rotula cada contorno com Foo
Aviso!!!! Nestes caracteres nenhum erro feito é checado! Se for especificado uma múltipla
substituição (i.e., %g%i), a rotina do sprintf irá procurar por argumentos não existentes e
o resultado provavelmente será um core (lixo). Não deverá ser usado em substituições que
sejam diferentes de flutuantes (i.e., %i ou %s não deverão ser usados).
Esta opção obtém um retorno ao padrão 'auto' quando um clear for usado.
auto
- especifica que um conjunto de caracteres não precisa ser especificado
previamente, mas em vez disto será usado a substituição padrão.
set clskip número - onde número é o número de linhas de contorno que serão puladas na
rotulação. Por exemplo, set clskip 2 irá rotular a cada duas linhas de contornos.
Plotando em Contorno Sombreado ou Grade Pintada (gxout = shaded ou grfill)
set cint valor - Atribui o intervalo de contorno ao valor especificado. Retorna ao padrão pelo clear
ou display.
set cmin valor - Os contornos não são plotados abaixo deste valor. Retorna ao padrão pelo c ou d.
set cmax valor - Os contornos não são plotados acima deste valor. Retorna ao padrão pelo c ou d.
set black off/val1 val2 - Os contornos não são plotados dentro deste intervalo. Retorna ao padrão
pelo clear ou display.
set clevs lev1 lev2 - Atribui especificados níveis de contorno. Retorna ao padrão pelo c ou d.
set ccols col1 col2 - Atribui especificadas cores aos níveis do clev. Retorna ao padrão pelo clear
ou display (Nota: A seqüência do arco-íris é: 9, 14, 4, 11, 5, 13, 3, 10, 7, 12, 8, 2, 6)
set rbrange baixo alto - Atribui um limite de valores que serão usados para determinar quais irão
adquir a cor arco-íris. Pelo padrão, são atribuídos ao baixo e ao alto o resultado de min e max
da grade. Retorna ao padrão pelo comando clear.
set rbcols cor1 cor2 <cor3> ...
60
<auto>
Especifica um nova seqüência de cor 'rainbow'. Os números das cores podem ser as novas
cores definidas via o comando ‘set rgb'. Essas cores substituem a seqüência de cores do arcoíris padrão quaisquer que sejam as seqüências de cores arco-íris usadas. Quando utilizar 'set
rbcols auto' a construída seqüência de arco-íris é usada. Este se ‘fixa’ até um novo comando.
set csmooth on| off | linear - Se on, a grade é interpolada para uma grade mais fina usando
interpolação cúbica antes de traçar os contornos. Se fixa até um novo comando.
Note: esta opção resultará em valores de contorno abaixo e acima do min e max da grade
interpolada. Este pode fisicamente resultar em valores inválidos tal como no caso de chuva
negativa. O problema pode ser evitado usando o set csmooth linear, que usa interpolação
linear para criar a grade mais fina.
Plotando em Valor de Ponto de Grade (gxout = grid)
set dignum número - Número de dígitos depois do decimal
set digsize tamanho - Tamanho (em polegadas) dos números. Um bom limite de valores para ser
usado é de 0.1 até 0.15. Ambas as opções permanecem as mesmas até que sejam modificadas.
Plotando em Forma de Vetor (gxout = vector)
set ccolor cor - Atribui a cor do contorno, onde cor é um número especificado por:
0 - preto
1 - branco
2 - vermelho
3 - verde
4 - azul
5 - ciano
6 - magenta
7 - amarelo
8 - laranja
9 - roxo
10 - amarelo/verde
11 - azul médio
12 - amarelo escuro
13 - aqua
14 - roxo escuro
15 - cinza
Retorna ao padrão pelo comando clear ou display
Pode também ser escolhido:
set ccolor rainbow - para obter a seqüência de cores do arco-íris.
set ccolor revrain - usa a seqüência inversa de arco-íris, complementa set ccolor rainbow
set cthick espessura - Atribui a espessura de uma linha aos contornos dado um inteiro no limite de
1 a 10 representando as espessuras de linhas relativas. Espessura de 6 ou mais será mais espessa
na tela. Primeiramente usado para controlar a saída de impressão.
set arrscl tamanho <magnitude> - Especifica a escala do comprimento da flecha. tamanho é o
comprimento da flecha em unidades de plotagem (polegadas na página virtual). Um valor típico
deverá estar ente 0.5 e 1.0. magnitude é a magnitude do vetor que produzirá uma flecha de
especificado tamanho. Os outros comprimentos de flecha serão escalados apropriadamente. Se
a magnitude não é dada, todas irão ter o mesmo comprimento. Retorna ao padrão pelo clear ou
display.
set arrowhead tamanho - onde tamanho é o tamanho da ponta da flecha. O padrão e 0.05. Se
atribuído para 0, nenhuma ponta de flecha é plotada. Se for atribuído um valor negativo, o
tamanho da ponta da flecha será escalonado pelo tamanho da flecha. O valor específico será do
tamanho de quando a flecha está com uma polegada de comprimento.
set cint valor - Atribui o intervalo de contorno ao valor especificado. c ou d retorna ao padrão.
set cmin valor - Os contornos não são plotados abaixo deste valor. Retorna ao padrão pelo c ou d.
set cmax valor - Os contornos não são plotados acima deste valor. Retorna ao padrão pelo c ou d.
set black off/val1 val2 - Os contornos não são plotados dentro deste intervalo. Retorna ao padrão
pelo clear ou display.
set clevs lev1 lev2 - Atribui especificados níveis de contorno. Retorna ao padrão pelo c ou d.
set ccols col1 col2 - Atribui especificadas cores aos níveis do clev. Retorna ao padrão pelo clear
61
ou display (Nota: A seqüência do arco-íris é: 9, 14, 4, 11, 5, 13, 3, 10, 7, 12, 8, 2, 6)
set rbrange baixo alto - Atribui um limite de valores que serão usados para determinar quais irão
adquir a cor arco-íris. Pelo padrão, são atribuídos ao baixo e ao alto o resultado de min e max
da grade. Retorna ao padrão pelo comando clear.
set rbcols cor1 cor2 <cor3> ...
<auto>
Especifica um nova seqüência de cor 'rainbow'. Os números das cores podem ser as novas
cores definidas via o comando ‘set rgb'. Essas cores substituem a seqüência de cores do arcoíris padrão quaisquer que sejam as seqüências de cores arco-íris usadas. Quando utilizar 'set
rbcols auto' a construída seqüência de arco-íris é usada. Este se ‘fixa’ até um novo comando.
set arrlab on|off - Estabelece a plotagem do rótulo do vetor para gxout vector: O padrão é on e
este se "fixa" (o clear não muda este estado).
Plotando em Forma de Barbela do Vento (gxout = barb)
Igual para gxout = vector.
Gráfico de Espalhamento (gxout = scatter)
set cmark marca - Atribui um marcador de linha:
0 - nehum
1 - cruz
2 - círculo aberto
3 - círculo fechado
4 - quadrado aberto
5 - quadrado fechado
6-X
7 - diamante
8 - triângulo
9 - nenhum
10 - círculo aberto com linha vertical
11 - oval aberta
Retorna ao padrão pelo clear ou display
set digsize tamanho - Tamanho (em polegadas) dos números. Uma bom limite de valores para uso
é de 0.1 a 0.15. Ambas as opções permanecem as mesmas até serem modificadas.
set ccolor cor - Atribui a cor do contorno, onde cor é um número especificado por:
0 - preto
1 - branco
2 - vermelho
3 - verde
4 - azul
5 - ciano
10 - amarelo/verde
6 - magenta 11 - azul médio
7 - amarelo
12 - amarelo escuro
8 - laranja
13 - aqua
9 - roxo
14 - roxo escuro
15 - cinza
Retorna ao padrão pelo comando clear ou display
Pode também ser escolhido:
set ccolor rainbow - para obter a seqüência de cores do arco-íris.
set ccolor revrain - usa a seqüência inversa de arco-íris, complementa set ccolor rainbow
62
Plotando um Valor de Ponto de Grade Especifico (gxout = fgrid)
set fgvals valor cor <valor cor><valor cor> ... - O tipo de saída do fgrid trata os valores de
grade como inteiros arredondados, e pintará uma grade de valor inteiro especificado com a cor
especificada. Os valores não especificados não serão pintados. Se “Fixa”.
Plotando em Forma de Linhas de Corrente (gxout = stream)
set ccolor cor - Atribui a cor do contorno, onde cor é um número especificado por:
0 - preto
1 - branco
2 - vermelho
3 - verde
4 - azul
5 - ciano
6 - magenta
7 - amarelo
8 - laranja
9 - roxo
10 - amarelo/verde
11 - azul médio
12 - amarelo escuro
13 - aqua
14 - roxo escuro
15 - cinza
Retorna ao padrão pelo comando clear ou display
Pode também ser escolhido:
set ccolor rainbow - para obter a seqüência do cores do arco-íris.
set ccolor revrain - usa a seqüência inversa do arco-íris, complementa set ccolor rainbow
set cint valor - Atribui o intervalo de contorno ao valor especificado. Retorna ao padrão pelo clear
ou display.
set cmin valor - Os contornos não são plotados abaixo deste valor. Retorna ao padrão pelo c ou d.
set cmax valor - Os contornos não são plotados acima deste valor. Retorna ao padrão pelo c ou d.
set black off/val1 val2 - Os contornos não são plotados dentro deste intervalo. Retorna ao padrão
pelo clear ou display.
set clevs lev1 lev2 - Atribui especificados níveis de contorno. Retorna ao padrão pelo c ou d.
set ccols col1 col2 - Atribui especificadas cores aos níveis do clev. Retorna ao padrão pelo clear
ou display (Nota: A seqüência do arco-íris é: 9, 14, 4, 11, 5, 13, 3, 10, 7, 12, 8, 2, 6)
set rbrange baixo alto - Atribui um limite de valores que serão usados para determinar quais irão
adquir a cor arco-íris. Pelo padrão, são atribuídos ao baixo e ao alto o resultado de min e max
da grade. Retorna ao padrão pelo comando clear.
set rbcols cor1 cor2 <cor3> ...
<auto>
Especifica um nova seqüência de cor 'rainbow'. Os números das cores podem ser as novas
cores definidas via o comando ‘set rgb'. Essas cores substituem a seqüência de cores do arcoíris padrão quaisquer que sejam as seqüências de cores arco-íris usadas. Quando utilizar 'set
rbcols auto' a construída seqüência de arco-íris é usada. Este se ‘fixa’ até um novo comando.
set strmden valor - especifica a densidade de linhas de corrente, onde o valor é de 1 a 10. O
padrão é 5.
63
1-D Gráficos de Estação
Plotando uma série de tempo de barbela de vento em um ponto (gxout = tserbarb)
Por exemplo:
set gxout tserbarb
d us(stid=79001);vs(stid=79001)
Plotando uma série de símbolos de tempo em um ponto (gxout = tserwx)
Por exemplo:
set parea 0.75 10.5 3.875 4.25
set grads off
set gxout tserwx
set digsiz 0.11
d wx(stid=79001)
onde a grade wx contem códigos para os símbolos de tempo
Gráficos de Estação 2-D
Plotando os valores de estação (gxout = value)
set ccolor cor - Atribui a cor do contorno, onde cor é um número especificado por:
0 - preto
1 - branco
2 - vermelho
3 - verde
4 - azul
5 - ciano
6 - magenta
7 - amarelo
8 - laranja
9 - roxo
10 - amarelo/verde
11 - azul médio
12 - amarelo escuro
13 - aqua
14 - roxo escuro
15 - cinza
Retorna ao padrão pelo comando clear ou display
Pode também ser escolhido:
set ccolor rainbow - para obter a seqüência de cores do arco-íris.
set ccolor revrain - usa a seqüência inversa de arco-íris, complementa set ccolor rainbow
set cthick espessura - Atribui a espessura de uma linha aos contornos dado um inteiro no limite de
1 a 10 representando as espessuras de linhas relativas. Espessura de 6 ou mais será mais espessa
na tela. Primeiramente usado para controlar a saída de impressão.
set digsize tamanho - Tamanho (em polegadas) dos números. Um bom limite de valores para ser
usado é de 0.1 até 0.15. Ambas as opções permanecem as mesmas até que sejam modificadas.
set stid on/off - Controla se o identificador da estação será exibido próximo aos valores ou não.
Plotando a barbela de vento na estação (gxout = barb)
set ccolor cor - Atribui a cor do contorno, onde cor é um número especificado por:
0 - preto
1 - branco
5 - ciano
6 - magenta
10 - amarelo/verde
11 - azul médio
64
15 - cinza
2 - vermelho
3 - verde
4 - azul
7 - amarelo
8 - laranja
9 - roxo
12 - amarelo escuro
13 - aqua
14 - roxo escuro
Retorna ao padrão pelo comando clear ou display
Pode também ser escolhido:
set ccolor rainbow - para obter a seqüência de cores do arco-íris.
set ccolor revrain - usa a seqüência inversa de arco-íris, complementa set ccolor rainbow
set cthick espessura - Atribui a espessura de uma linha aos contornos dado um inteiro no limite de
1 a 10 representando as espessuras de linhas relativas. Espessura de 6 ou mais será mais espessa
na tela. Primeiramente usado para controlar a saída de impressão.
set digsize tamanho - Tamanho (em polegadas) dos números. Um bom limite de valores para ser
usado é de 0.1 até 0.15. Ambas as opções permanecem as mesmas até que sejam modificadas.
Plotando o símbolo de tempo na estação (gxout = wxsym)
set ccolor cor - Atribui a cor do contorno, onde cor é um número especificado por:
0 - preto
1 - branco
2 - vermelho
3 - verde
4 - azul
5 - ciano
6 - magenta
7 - amarelo
8 - laranja
9 - roxo
10 - amarelo/verde
11 - azul médio
12 - amarelo escuro
13 - aqua
14 - roxo escuro
15 - cinza
Retorna ao padrão pelo comando clear ou display
Pode também ser escolhido:
set ccolor rainbow - para obter a seqüência de cores do arco-íris.
set ccolor revrain - usa a seqüência inversa de arco-íris, complementa set ccolor rainbow
set cthick espessura - Atribui a espessura de uma linha aos contornos dado um inteiro no limite de
1 a 10 representando as espessuras de linhas relativas. Espessura de 6 ou mais será mais espessa
na tela. Primeiramente usado para controlar a saída de impressão.
set digsize tamanho - Tamanho (em polegadas) dos números. Um bom limite de valores para ser
usado é de 0.1 até 0.15. Ambas as opções permanecem as mesmas até que sejam modificadas.
set wxcols c1 c2 c3 c4 c5 c6 - onde: c1 ... c6 são as cores dos símbolos
Plotando o modelo de estação (gxout = model)
set ccolor cor - Atribui a cor do contorno, onde cor é um número especificado por:
0 - preto
1 - branco
2 - vermelho
3 - verde
4 - azul
5 - ciano
6 - magenta
7 - amarelo
8 - laranja
9 - roxo
10 - amarelo/verde
11 - azul médio
12 - amarelo escuro
13 - aqua
14 - roxo escuro
15 - cinza
Retorna ao padrão pelo comando clear ou display
Pode também ser escolhido:
set ccolor rainbow - para obter a seqüência de cores do arco-íris.
set ccolor revrain - usa a seqüência inversa de arco-íris, complementa set ccolor rainbow
65
set cthick espessura - Atribui a espessura de uma linha aos contornos dado um inteiro no limite de
1 a 10 representando as espessuras de linhas relativas. Espessura de 6 ou mais será mais espessa
na tela. Primeiramente usado para controlar a saída de impressão.
set digsize tamanho - Tamanho (em polegadas) dos números. Um bom limite de valores para ser
usado é de 0.1 até 0.15. Ambas as opções permanecem as mesmas até que sejam modificadas.
set mdlopts opt - onde: opt = noblank, blank, dig3, ou nodig3
set wxcols c1 c2 c3 c4 c5 c6 - onde: c1 ... c6 são as cores dos símbolos
Outras Opções de Exibição
Encontrando a estação mais próxima do ponto x,y (gxout = findstn)
Veja Capítulo 23 Programando no GrADS.
Escrevendo os dados para um arquivo (gxout = fwrite)
set fwrite out.dat
set gxout fwrite
Direciona a grade ao arquivo out.dat (direciona para grads.fwrite pelo padrão). Os dados
consistem de flutuantes locais (i.e., flutuante 32-bit IEEE big_endian em uma estação de
trabalho sun/sgi/hp)
Exibindo informações sobre os dados (gxout = stat)
set gxout stat
d
envia a saída para o terminal ao contrário de uma plotagem ou saída de dados (i.e., set fwrite
out.dat ; set gxout fwrite; d rh). Ou a saída vai para a variável de script "result" que pode ser
analisada gramaticalmente no interior de um script (veja o script corr.gs do GrADS)
A saída permite que muitos cálculos estatísticos sejam realizados. Aqui está um exemplo da
abertura de um arquivo do modelo global e veremos estatisticamente a umidade relativa em
1000 mb, estatisticamente,
ga-> set gxout stat
ga-> d rh
Data Type = grid
Dimensions = 0 1
I Dimensions = 1 to 145
J Dimensions = 1 to 73
Sizes = 145 73 10585
Undef value = 1e+20
Undef count= 0 Valid count = 10585
Min, Max = 0.0610352 100.061
Stats(sm,sumsqr,n): 787381 6.35439e+07 10585
Stats(sum,sumsqr)/n: 74.3865 6003.2
Stats(sun,sumsqr)/(n-1): 74.3935 6003.77
Stats(sigma,var)(n): 21.6761 469.854
Stats(sigma,var)(n-1): 21.6771 469.898
Cmin, cmax, cint = 10 100 10
Estudando agora estes em detalhes:
66
Data Type = grid ----- dados em grade
Dimensions = 0 1 ----- o tipo de dimensão para a variável
0 - lon
1 - lat
2 - lev
3 - tempo
1 - não variando
I Dimensions = 1 para 145 ------ óbvio
J Dimensions = 1 para 73
Sizes = 145 73 10585 ------- 10585 é 145*73 ou o número total de pontos
Undef Value = 1e+20 ------- valor indefinido
Undef Count = 0 Valid count = 10585 ----- # de pontos definidos e indefinidos na grade. É
bom lembrar que se o GrADS não puder encontrar quaisquer dados ele retornará undefs.
Isto é útil para checar se quaisquer dados existem, Valid count= 0
significa não...
Min, Max = 0.0610352 100.061 ---- UHHH OHHHH! uma ligeira super saturação.
Stats(sum,sumsqr,n):
787381 6.35439e+07 10585 - Este honestamente deveria ser
óbvio, sum = a soma simples de todos os pontos definidos. sumsqr = soma de, neste
caso, rh*rh e 10585 é n.
Stats(sum,sumsqr)/n: 74.3865 6003.2 - dividido por n por conveniência, o primeiro
número é a media "influenciada"...
Stats(sum,sumsqr)/(n-1): 74.3935 6003.77 - a assim chamada media "não influenciada"
(removido 1 grau de liberdade), etc.
Stats(sigma,var)(n): 21.6761 469.854 - o desvio padrão e a variância "influenciada" (n)
Stats(sigma,var)(n-1): 21.6771 469.898 - o desvio padrão e a variância "não influenciada"
(n-1)
Cmin, cmax, cint = 10 100 10 - o que o GrADS usará quando plotar o contorno.
NOTA: Este trabalha para ambos grade e dados de estação
Comandos de Atribuição para Controlar a Exibição Gráfica
Atribuindo um limite para a plotagem 1-D ou plotagem scatter
set vrange y1 y2 - Especifica um limite de valores das variáveis para a escala do eixo y (de y1 y2). Retorna ao padrão pelo clear somente.
set vrange2 x1 x2 - Especifica um limite de valores das variáveis para a escala do eixo x (de x1 x2). Retorna ao padrão pelo clear somente.
Controlando a escala log quando a dimensão de Z é plotada em qualquer plotagem:
set zlog on|off - Atribui a escala log na dimensão de Z para on ou off. Fixa-se até o reset.
Controlando a orientação dos eixos:
set xyrev on off - Inverte os eixos em uma plotagem.
Exemplo:
Pelo padrão para uma plotagem de Z, T, a dimensão do tempo é plotada horizontalmente, e a
67
dimensão Z é plotada verticalmente. Pela atribuição xyrev, a dimensão do tempo será plotada
verticalmente e a dimensão Z horizontalmente.
set xflip on off - move a ordem do eixo horizontal (se o eixo é horizontal depois do xyrev ser
aplicado).
set yflip on off - move a ordem do eixo vertical.
Todos os comandos de orientação de eixos acima retornam ao padrão pelo comando clear ou set
vpage.
Controlando a rotulação dos eixos
set xaxis|yaxis inícial final <incr> - Especifica que o eixo será rotulado pelos especificados
valores, desde o inicial até o final com o incremento. Os rótulos podem ter nenhuma relação
com os dados ou dimensões.
set xlint intervalo
ylint
Especifica o intervalo do rótulo. Sobreposto pelos ‘set xlevs/ylevs'. Retorna ao padrão pelo
comando clear.
Note que os rótulos são sempre 'iniciados' em 0. i.e., se for atribuído o intervalo para 3, os
rótulos serão 0, 3, 6, 9 ...
Se for atribuído ao intervalo um valor negativo, este indica que a rotulação começa no início
dos valores do eixo. Se este for 1 ( e intervalo de 3), então os rótulos serão 1, 4, 7...
Esta atribuição irá sobrepor um intervalo rotulado especificado nos comandos xaxis ou yaxis.
Este comando não se aplica para um eixo de data/ tempo.
set xlab on | off | auto | string
ylab
Este trabalha da mesma forma que o comando 'set clab'. Um exemplo:
set ylab %.2f
plotará todos os rótulos do eixo Y com 2 dígitos depois do ponto decimal. Este é retorna ao
padrão pelo comando clear.
set xlevs rot1 rot2 ...
ylevs
Especifica os níveis dos rótulos para a plotagem do eixo X ou Y. Cada rótulo desejado pode ser
especificado. Retorna ao padrão pelo comando clear.
Aplicando set xaxis ou yaxis, e então set xlevs/ylevs, os níveis especificados aplicam-se à um
limite de rotulação especificado no comando xaxis ou yaxis.
Este comando não se aplica para um eixo de data/ tempo.
68
set xlopts cor<espessura < tamanho>> - controla aspectos de exibição de eixo, onde:
ylopts
xlopts
ylopts
cor
espessura
tamanho
controla o eixo X
controla o eixo Y
cor do rótulo (Padrão 1)
espessura do rótulo (Padrão 4)
tamanho do rótulo (Padrão 0.12)
set xlpos offset lado - controla a posição dos rótulos do eixo x, onde:
offset
offset em polegadas
lado
b ou t (abaixo ou acima)
set ylpos offset lado - Controla a posição dos rótulos do eixo y, onde:
offset
offset em polegadas
side
r ou l (direita ou esquerda)
Controlando a exibição das projeções de mapa
set mproj proj – Atribui atual projeção de mapa, as palavras-chave são:
robinson projeção Robinson, requer atribuição de lon de -180 a 180 e lat de -90 a 90
latlon
o padrão. A projeção lat/lon com a razão de aspecto mantida.
ccaled
projeção de latlon onde a razão de aspecto não é mantida. A plotagem preenche
toda a área de plotagem.
nps
estereográfica polar norte
sps
estereográfica polar sul
off
a mesma que a scaled, mas nenhum mapa é desenhado e os rótulos do eixo não são
interpretados como rótulos de lat/lon.
set mpvals lonmin lonmax latmin latmax
off
Atribui referência de longitudes e de latitudes para plotagens estereográficas polares. Pelo
padrão, estes são atribuídos aos atuais limites do ambiente dimensionado. Este comando
cancela este, e permite referência aos dados para ser casado com a exibição do mapa. A
plotagem polar será desenhada tal qual a região unida por essas longitudes e latitudes e será
inteiramente incluída na plotagem.
O GrADS plotará as linhas de lat/lon em plotagens polares ainda com nenhum rótulo. Para
desligar este
set grid off .
Controlando o desenho do mapa:
set mpdset <lowres|mres|hires|nmap> - seleciona a resolução da base do mapa, onde:
lowres é o padrão
mres e hires tem os contornos dos estados e dos países
nmap cobre somente a América do Norte
set poli on|off – seleciona se os limites políticos serão desenhados quando usando os conjuntos de
dados de mapas mres ou hires. O padrão é on.
set map auto cor estilo espessura - desenha um mapa de fundo usando os atributos de linha
solicitados.
set mpdraw on|off - Se off, não desenha o mapa de fundo. O solicitado escalonamento do mapa
está ainda em uso.
69
set grid on | off | valores de estilo | horizontal | vertical – Desenha, ou não, linhas de grade
usando a cor e o estilo de linha especificado. O padrão é desenhar a linha de grade com a cor
15 (cinza) e com o estilo de linha 5 (pontos marcados). horizontal indica plotar somente as
linhas de grade horizontais; vertical as linhas de grade verticais.
Todos os valores acima permanecem os mesmos até que sejam modificados por novos comandos
set.
Controlando a anotação
set font número - Seleciona a fonte para as subsequentes operações de texto, onde: número = 0 ...
9.
draw title caracteres - Desenha o título no topo do gráfico. A barra invertida no conjunto de
caracteres denota nova linha.
set annot cor <espessura> - Atribui cor e espessura de linha para o comandos de desenho acima
mencionado. O padrão é branco e espessura 6. Este comando também atribui a cor e espessura
às bordas dos eixos, rótulos dos eixos e marcadores. Os marcadores e os rótulos são plotados na
especificada espessura menos 1.
Controlando a exibição do console
set display grey|greyscale|color <black|white> - Atribui o modo de exibição.
Pelo padrão, o modo é color, onde o sombreado e o contorno são feitos com as cores do arcoíris. Quando for usado uma exibição monocromática, essas cores poderão mapear a escala de
cinza em um modo não muito agradável. Quando o modo está atribuído ao greyscale, os
contornos são exibidos usando um nível de cinza único, e contornos são exibidos usando um
único nível de cinza, e contornos sombreado são feitos usando uma seqüência de tons de cinza.
Opcionalmente, pode-se atribuir a cor de fundo da janela gráfica para black ou white. O padrão
é black.
set display grey white
dá um resultado na exibição que é muito parecido à saída produzida pelo gxps.
Este comando NÃO afeta a saída de impressão.
set background white/black o padrão é black
Controlando a moldura
set frame on | off | circle - onde:
on
plota uma moldura retangular cercando a região escolhida
off
nenhuma moldura é plotada
círculo
plota uma moldura retangular para projeções lat-lon, plota uma moldura circular
para uma plotagem polar na latitude mais exterior. Usado para plotar hemisférios inteiros
somente.
Controlando a exibição do logotipo
set grads on|off - off desabilita a exibição do logotipo do GrADS na tela e saída de
impressora. Retorna ao padrão pelo clear.
70
20.0 Funções do GrADS
O verdadeiro poder do GrADS está na sua capacidade de análise de dados. Essas capacidades são
acessadas através das funções internas do GrADS ou através de funções externas definidas (as assim
chamadas udfs, veja o Capítulo 21) aplicadas para uma expressão (o GrADS pede por uma grade de
dados, i.e. var.1(t=1)).
As funções são invocadas por nome, com seus argumentos separados por vírgulas e posicionados
entre parêntesis.
As expressões são tipicamente um dos argumentos fornecidos para uma função. As funções podem ser
aninhadas. Algumas funções modificam o ambiente de dimensão ao operarem.
A seguir será apresentada a lista de funções do GrADS que está agrupada alfabeticamente sob
categorias descritivas.
Funções de Média
aave
aave(expr,xdim1,xdim2,ydim1,ydim2)
Calcula uma média de área sobre uma região X-Y. Normalmente melhor do que usando funções ave
aninhadas.
expr
xdim1
xdim2
ydim1
ydim2
qualquer expressão do GrADS válida.
expressão de dimensão inicial para a dimensão X.
expressão de dimensão final para a dimensão X.
expressão de dimensão inicial para a dimensão Y.
expressão de dimensão final para a dimensão Y.
Notas de uso
1) Na ausência de valores de dados ausentes aave dá o mesmo resultado que as funções ave aninhadas
nas dimensões X e Y:
ave(ave(expr,x=1,x=72),y=1,y=46)
sendo equivalente a:
aave(expr,x=1,x=72,y=1,y=46)
em termos dos resultados numéricos. A função aave é mais eficiente.
2) Quando há valores de dados ausentes, a função aave não retorna o mesmo resultado que as funções
ave aninhadas. Por exemplo, considere a pequena grade:
6
10
12
18
10
U
3
10
U
5
10
U
onde U representa os valores de dados ausentes. Se forem aplicadas as funções ave aninhadas, a
ave interior fornecerá médias das filas de 6, 10, e 12. Quando a ave exterior for aplicada, o
resultado será uma média de 10. Quando a aave é utilizada, todos os valores participam igualmente
(neste caso, nenhum peso é aplicado na média final), e o resultado será 84/9 ou aproximadamente
9.33.
71
3) A função aave assume que as coordenadas globais são longitude na dimensão X e latitude na
dimensão Y. E faz a ponderação na dimensão de latitude pelo delta do seno da latitudes e será,
também, calculado apropriadamente para grades espaçadas desigualmente.
4) A função aave sempre calcula a média no limite exato que for especificado em coordenadas
globais. Algo diferente ocorre na função ave onde o símbolo –b é usado para obter este
procedimento. Se os limites especificados pelas expressões de dimensão não caírem nos limites de
grade, então os valores de limite serão apropriadamente ponderados na média.
Quando as coordenas de grade são utilizadas nas expressões de dimensões, então estas são
convertidas para coordenas globais para o limite ser determinado. Esta conversão é feita utilizando
a escala do arquivo padrão . Note que a conversão é feita utilizando o limite de grade exterior, em
vez da grade central. Por exemplo:
aave(expr,x=1,x=72,y=1,y=46)
Aqui o limite será determinado utilizando os valores de grade 0.5, 72.5, 0.5, e 46.5 os quais serão
convertidos para coordenadas globais. Se for assumido que x=1 está em 0 graus de longitude e
x=72 está em 355 graus de longitude, então o limite para a média será de -2.5 para 357.5 graus,
que pode cobrir toda a Terra. Na dimensão Y, quando os limites estão além do pólo, a função aave
reconhece estas e os pondera apropriadamente.
Exemplos
1) Veja na função tloop um exemplo de como criar uma série de tempo de médias de área.
2) Um exemplo de como calcular uma média de área dos dados somente sobre os continentes, dado
uma grade de máscara:
aave(maskout(p,mask.3(t=1)),x=1,x=72,y=1,y=46)
Neste caso, é assumido que a grade de máscara tem valores negativos nos pontos sobre o oceano.
amean
amean(expr,xdim1,xdim2,ydim1,ydim2)
Trabalha exatamente igual a aave, exceto que a ponderação da área está desabilitada, i.e., a média é
uma simples soma direta / # pontos.
ave
ave(expr,dexpr1,dexpr2<,tincr<,símbolos>>)
Calcula a média da expr sobre um especificado limite de dimensões iniciando na dexpr1 e terminando
na dexpr2. Se no cálculo da média a dimensão for tempo, pode ser especificado um incremento
opcional de tempo tincr.
expr
é qualquer expressão do GrADS válida.
dexpr1
é o ponto inicial para a média, especificado como uma expressão de dimensão
padrão do GrADS.
dexpr2
é o ponto final para a média. As dimensões das dexpr1 e dexpr2 devem combinar.
tincr
é um incrementando de tempo para a média, se dexpr1 e dexpr2 são dimensões de
tempo.
símbolos
Os seguintes símbolos são válidos:
b O símbolo de limite indica que a média deverá ser calculada nos limites exatos
especificados em dexpr1 e dexpr2, ao invés de ser nos pontos de grade mais próximos. Veja
as notas de uso abaixo.
72
Notas de Uso:
1) Os limites e intervalos sobre os quais a média é calculada são determinados pela escala do arquivo
padrão. As conversões das dexpr1 e dexpr2 para coordenadas de grade são realizadas usando a
escala do arquivo padrão. Os exemplos abaixo mostram o que isto significa.
2) A média é ponderada para intervalos de grade não linear. As médias sobre latitudes são ponderadas
pelo delta do seno das latitudes no limite grade. Os limites da grade são sempre definidos como
sendo o ponto médio entre pontos de grade adjacentes.
3) Se dexpr1 e dexpr2 são especificadas em coordenas globais, as coordenadas são convertidas para a
mais próxima coordenadas de grade inteira baseando-se na escala do arquivo padrão. A média é
então desempenhada sobre o limite destas coordenadas de grade. Para os pontos finais serão dados
ponderações normais, a menos que o símbolo -b seja especificado.
Exemplos:
Todo os exemplos usam os dois arquivos descritores de dados de exemplo no começo desta seção.
Para os seguintes exemplos, o ambiente de dimensão X-Y está variando e Z-T está fixo.
1) Considera a seguinte média, quando o arquivo padrão é o arquivo #1:
ave(z.2,t=1,t=10)
Esta sendo calculado a média da variável do arquivo #2, mas usando a escala do arquivo #1. O
arquivo #1 tem um intervalo de tempo de 6 horas, mas o arquivo #2 tem um intervalo de tempo de
12 horas. A média tentará assim acessar os dados do arquivo #2 para os tempos que não estão
disponíveis, e um erro ocorrerá. Para evitar isto, o arquivo padrão deverá ser atribuído ao arquivo
#2: set dfile 2
A média:
ave(z,t=1,t=120,4)
calculará somente dos dados das 00Z do arquivo #1, desde que o incremento do tempo seja 4, o
qual para este arquivo está em 24 horas.
3) No cálculo de uma média zonal como segue:
ave(z,lon=0,lon=360)
a coordena global será convertida para coordena de grade, aqui X varia de 1 para 181, e o ponto de
grade na longitude 0º (e 360º) será usado duas vezes na média. Para ter os pontos finais desta
média apropriadamente ponderados, deve ser usada o símbolo -b:
ave(z,lon=0,lon=360,-b)
ou calculando a média usando a coordena de grade diretamente:
ave(z,x=1,x=180)
4) As operações de média podem ser aninhadas:
ave(ave(z,x=1,x=180),y=1,y=46)
Neste caso, para calcular uma média de área. Note que para média de área, a função aave é melhor.
Veja o funcionamento do aave.
Quando aninhando médias, a ordem do aninhamento pode ter um efeito dramático na performance.
Deve sempre ser lembrado a ordem dos dados nos arquivos do GrADS: X varia mais rápido, então
o Y, Z e T. Quando aninhando médias, a dimensão que varia mais rápido deve ficar dentro do ave
interior:
73
set lon -90
set lat -90 90
set lev 1000 100
d ave(ave(t,x=1,x=180),t=1,t=20)
Este cálculo de média seria mais eficiente do que, por exemplo:
ave(ave(t,t=1,t=20),x=1,x=180)
embora o resultado numérico final seja o mesmo.
5) O uso do comando define pode fazer certas operações de forma mais eficiente. Para calcular o
desvio padrão, por exemplo:
sqrt(ave(pow(ave(z,t=1,t=20)-z,2),t=1,t=20))
seria correta, mas a média interna será calculada 20 vezes. Definindo a média interior antes será
substancialmente mais rápido:
define zave = ave(z,t=1,t=20)
d sqrt(ave(pow(zave-z,2),t=1,t=20))
mean
meio(expr,dexpr1,dexpr2<,tincr<,bandeiras)
Trabalha exatamente igual a ave, exceto que a ponderação de área é desabilitada, i.e., a média é uma
soma direta / # pontos.
vint
vint(expr,psexpr,topo)
Desempenha uma integral vertical da peso-massa em coordena de pressão em mb, onde:
expr
uma expressão do GrADS para a quantidade que será integrada.
psexpr
uma expressão fornecendo a pressão à superfície, em mb, o qual será usada para limitar
a integração sobre a base
topo
uma constante, dando a pressão limitante no topo, em mb. Este valor não pode ser
fornecido como uma expressão.
O cálculo é uma soma da peso-massa das camadas:
1
∑ expr∆pK
g
onde os limites são a pressão à superfície sobre a base e o valor de topo indicado no topo. O
somatório é feito para cada camada presente que está entre os níveis unidos. As camadas são
determinadas pelos diferentes níveis da dimensão Z do arquivo padrão. Cada camada é considerada
estar no ponto médio entre os níveis realmente presentes e é assumido ter o mesmo valor por toda a
camada, i.e., o valor do ponto de grade no meio da camada.
Notas De Uso
1) Desde que o somatório seja feito usando os níveis Z do arquivo padrão, é importante que o arquivo
padrão tenha a mesma coordenada da dimensão Z como a expr.
74
2) Os níveis de dados abaixo e acima dos níveis do somatório (pressão à superfície na base; valor de
topo no topo) são ignorados, até mesmo se presente.
3) É assumido que os valores de dimensões globais para a dimensão Z são valores de pressão em mb.
As unidades de g são tais que quando a expressão integrada é umidade específica (q) em unidades
de g/g, o resultado é g de água por metro quadrado, ou essencialmente água precipitável em mm.
4) É normalmente uma boa idéia fazer o valor da pressão no topo estar no topo de uma camada. Por
exemplo, se o arquivo padrão (e os dados) têm níveis de pressão em ...,500,400,300,250,... então
um bom valor para topo poderia ser 275, o valor no topo da camada que estende de 350 até 275
mb.
5) A função vint opera somente em um ambiente de dimensão com X-Y variando
Exemplos
1) Um uso típico de vint pode ser:
vint(q,ps,275)
para integrar a umidade específica para obter água precipitável, em mm.
Funções de Filtro
smth9
smth9(expr)
Desempenha um alisamento de 9 pontos para a grade resultante da expr.
Notas De Uso
1) O resultado em cada ponto de grade é uma média ponderada do ponto da grade mais os 8 pontos
circundantes. O ponto de grade central recebe um peso de 1.0, os pontos de cada lado, acima e
abaixo recebem peso 0.5, e os pontos de canto recebem um peso 0.3.
2) Todos os 9 pontos são multiplicados pelos seus pesos e somados, então são divididos pelo peso
total para obter um valor suave. Quaisquer pontos de dados ausentes não são incluídos na soma; os
pontos além do limite da grade são considerados ser ausentes. Assim o resultado final pode ser o
resultado de uma média com menos que 9 pontos.
3) Se os dados de grade tem 1-Dimensão, o resultado é um alisamento de 3 pontos.
Funções de Diferença Finitas
cdiff
cdiff(expr,dim)
Desempenha uma operação de diferença centrada sobre a expr na direção especificada pela dim. A
diferença é feita no espaço de grade e nenhuma adaptação é desempenhada para grades espaçadas
desigualmente. O valor resultante em cada ponto de grade é o valor no ponto de grade mais um menos
o valor no ponto de grade menos um. O argumento dim especifica a dimensão sobre o qual a diferença
esta sendo calculada, e é um simples caracter: X, Y, Z, ou T.
75
O valores resultantes nas grade limites são atribuídos para ausentes.
Exemplos
1) A função cdiff pode ser usada para duplicar o cálculo feito pela função hcurl:
dv = cdiff(v,x)
dx = cdiff(lon,x)*3.1416/180
du = cdiff(u*cos(lat*3.1416/180),y)
dy = cdiff(lat,y)*3.1416/180
display (dv/dx-du/dy)/(6.37e6*cos(lat*3.1416/180))
O exemplo acima assume que há uma variação do ambiente dimensionado X-Y. Note que as
variáveis intrínsecas lat e lon dão resultados em graus e devem ser convertidas no cálculo para
radianos. Note também que foi assumido o raio da Terra ter 6.37e6 metros, portanto as
componentes do vento U e V terão unidades de m/seg.
2) A advecção de temperatura pode ser calculada usando a função cdiff como segue:
dtx = cdiff(t,x)
dty = cdiff(t,y)
dx = cdiff(lon,x)*3.1416/180
dy = cdiff(lat,y)*3.1416/180
display -1*( (u*dtx)/(cos(lat*3.1416/180)*dx) + v*dty/dy )/6.37e6
onde a variável t é a temperatura, u é a componente do U do vento, e v é a componente V do
vento.
Funções de Grade
const
const(expr,constante<,símbolo>)
Algum ou todos os valores na expr são atribuídos para o valor da constante, dependendo do valor do
símbolo:
expr
Uma expressão válida do GrADS.
constante
Uma constante, dada como um inteiro ou valor de ponto flutuante. O valor será
tratado como ponto flutuante.
símbolo
Se nenhum símbolo for especificado, todos os valores de dados presentes na expr
serão atribuídos ao valor da constante para formar o resultado. Os valores de dados ausentes
serão preservados como ausentes.
Outros valores da símbolo:
u todos os valores de dados ausentes são atribuídos ao valor da constante. Os dados não ausentes
permanecem inalterados.
a todos os valores de dados possíveis no resultado são atribuídos ao valor da constante, incluindo
os valores de dados ausentes.
Notas de Uso
1) Esta função opera com dados em grade e dados de estação.
76
Exemplos
1) A função const pode ser usada para designar um novo valor para dados ausentes, assim os dados
ausentes podem participar em operações:
const(z,0.0,-u)
2) A função const é útil quando for exibido uma plotagem usando o tipo de saída gráfica linefill,
quando uma das linhas precisar ser uma linha reta horizontal:
set lon -90
set lat -90 90
set gxout linefill
set lev 500
d const(t,-20);t-273.16
3) A função const pode ser usada para calcular a fração do globo coberta por algum valor de interesse.
Neste caso, a porção do globo coberta por precipitação maior que 10 mm/dia é calculado como
uma série do tempo:
set lon 0 360
set lat -90 90
set t 1 last
define ones = const(const(maskout(p,p-10),1),0,-u)
set x 1
set y 1
d tloop(aave(ones,lon=0,lon=360,lat=0,lat=360))
Note que primeiro foi criado um vetor definido que contém 1 onde o valor da precip é maior que
10, e 0 onde quer que o valor da precip seja menor que 10. Isto é feito via funções indentadas,
onde primeiro foi usado a função maskout para atribuir a todos os valores menores que 10 para
ausentes. Então foi usada a função const com nenhum argumento para atribuir a todos os valores
não ausentes para 1, então a função const com o símbolo -u foi usado para atribuir todos os valores
de dados ausentes para 0. A função aave é usada para calcular uma média ponderada em área.
Desde que zeros e uns são avaliados, o resultado é uma fração de área onde há uns. Veja a função
tloop para uma descrição de como desempenhar para séries de tempo de médias de áreas.
maskout
maskout(expr,máscara)
Onde os valores de máscara são menores que zero, aos valores da expr são atribuídos valores de
dados ausentes.
Trabalha com dados em grade ou dados de estação. Onde valores de máscara são positivos, os valores
da expr não são modificados. Assim o resultado do maskout são dados com um possível aumento no
número de valores de dados ausentes. A função do maskout, em vista de sua simplicidade aparente, é
extremamente útil.
Exemplos
1) Veja os Exemplos da função const para uma descrição do uso do maskout para calcular a
porcentagem do globo coberta por precipitação.
77
2) A função maskout pode ser usada para causar que parte dos dados sejam ignorados enquanto são
feitos cálculos com ou outros. Por exemplo, tendo uma máscara terra-mar, onde valores no mar são
negativos, para calcular alguma média de área de uma quantidade somente sobre a terra:
d aave(maskout(p,mask.2),lon=0,lon=360,lat=0,lat=90)
3) Algumas pessoas muitas vezes têm dificuldade de usar uma grade de máscara, porque este é
colocado, algumas vezes, dentro um arquivo separado e com data/tempo e nível arbitrário. Assim,
é necessário, em algumas vezes, sobrepor localmente o ambiente de dimensão quando usar a grade
de máscara:
d aave(maskout(p,mask.2(t=1)),lon=0,lon=360,lat=0,lat=90)
provavelmente seria como no exemplo 2 teria que ser expressa nesta ordem para funcionar, com a
local sobrepondo de t=1 especificado no dado da máscara. Veja a documentação sobre como
avaliar expressões dentro do ambiente de dimensões do GrADS para mais informações.
skip
skip(expr,skipx,skipy)
Atribui os valores alternantes da expr para valores de dados ausente. Esta função é usada na exibição
de vetores de vento ou barbelas para uma menor densidade do número de vetores ou barbelas.
expr
skipx
skipy
uma expressão em grade.
número de pontos de grade a ser pulado na direção do X.
número de pontos de grade a ser pulado na direção do Y.
Exemplos
1) Para exibir um ponto de grade sim e outro não em ambas as direções X e Y:
d skip(u,2,2);v
2) Para exibir cada ponto de grade na direção do X, mas a cada 5 pontos de grade na direção do Y:
d skip(u,1,5);v
Note que não é necessário usar a função skip nas componentes U e V do vento; é suficiente plotar
somente uma componente com valores de dados ausentes para suprimir a plotagem do vetor ou
barbela de vento.
Funções Matemáticas
abs
abs(expr)
Toma o valor absoluto da expr. Opera com dados em grade e estação. Os valores de dados ausente
não participam.
acos
acos(expr)
78
Aplica a função cos-1 ao resultado da expr. Os valores da expr que excedem 1 ou são menores que -1
são atribuídos a ausente. O resultado da função acos está em radianos.
asin
asin(expr)
Aplica a função sin-1 na expr. Valores da expr que excedem 1 ou são menores que -1 são atribuídos a
ausente no resultado final. O resultado da função asin está em radianos.
atan2
atan2(expr1,expr2)
Aplica a função tan-1 ao resultado das duas expressões, usando a fórmula:
tan θ =
y
x
onde y é a expr1 e x está expr2. Situações onde x e y são ambas zero são válidas; o resultado é
arbitrariamente atribuído para zero. O resultado da função atan está em radianos.
cos
cos(expr)
Toma o cosseno da expr. Os valores são assumidos estar em radianos. Funciona com dados em grade
e estação.
exp
exp(expr)
Realiza a operação e**x, onde a expr é x. Funciona com dados em grade e estação.
gint
gint(expr)
Integral comum, o mesmo que ave exceto por não dividir pela área total
log
log(expr)
Toma o logaritmo natural da expressão. Pode ser usado com dados em grade ou estação. Os valores
menores ou iguais a zero são atribuídos para ausente no resultado.
log10
log10(expr)
79
Toma o logaritmo de base 10 da expressão. Pode ser usado com dados em grade ou estação. Os
valores menores ou iguais a zero são atribuídos para ausente no resultado.
pow
pow(expr1,expr2)
A função pow eleva os valores da expr1 ao expoente da expr2. Nenhuma verificação de erro é feita
para valores inválidos nos operandos. Esta função funciona com dados em grade e estação.
Exemplos
1) Para o quadrado de algum valor:
pow(expr,2)
2) Para duplicar a operação da função mag:
sqrt(pow(u,2)+pow(v,2))
sin
sin(expr)
Toma o seno da expressão fornecida. É assumido que a expressão esteja em radianos. Os valores do
resultantes estão na série -1 para 1. Esta função trabalha com dados em grade e estação.
sqrt
sqrt(expr)
Toma a raiz quadrada da expr. Esta função funciona com dados em grades e estação. Os valores na
expr que são menores que zero são atribuídos para ausentes no resultado.
tan
tan(expr)
Aplica a função trigonométrica da tangente da expr o qual é assumido estar em radianos. Opera com
dados em grade e estação.
Funções Meteorológicas
tvrh2q
tvrh2q(tvexpr,rhexpr)
Dado a temperatura virtual e a umidade relativa, tvrh2q calcula a umidade especifica, q, em g/g.
Especificamente:
tvexpr
rhexpr
100).
Uma expressão do GrADS válida onde o resultado é temperatura virtual, em Kelvin.
Uma expressão do GrADS que resulta em umidade relativa, em porcentagem (de 0 a
Esta função trabalha somente com dados em grade.
80
Notas De Uso
1) A fórmula de conversão requer a pressão em mb. tvrh2q assume que o sistema da coordenada Z é
pressão em mb. Se Z é uma dimensão variante, a pressão válida em cada ponto de grade é usada.
Quando Z é uma dimensão fixa, o valor de Z usado é o do atual ambiente dimensionado.
Note que é possível fornecer valores de um nível de pressão incorreto pela sobreposição do
corrente ambiente dimensionado:
set lev 500
d tvrh2q(tv(lev=850),rh(lev=850))
Neste caso, a função tvrh2q assumirá uma pressão de 500mb, a qual é o valor do atual ambiente
dimensionado atribuído para a dimensão Z. Entretanto, esta sendo usado dados do nível de 850mb,
assim a função produzirá resultados incorretos.
tvrh2t
tvrh2t(tvexpr,rhexpr)
Dado a temperatura virtual e a umidade relativa, tvrh2t retorna a temperatura em graus Kelvin. A
operação desta função é a mesma como tvrh2q; refira-se a descrição acima para maior informação.
Funções de Propósito Especiais
tloop
tloop(expr)
Quando o tempo é uma dimensão variante no ambiente dimensionado, a função tloop avalia a expr em
tempos fixos, então reconstrói a série de tempo para obter um resultado final que é variação de tempo.
A função tloop é necessária devido à implementação das regras de avaliação da expressão do GrADS,
e a implementação de outras certas funções. A função do tloop pode também melhorar performance
de certos cálculos.
A função do tloop é fornecida como um modo para obter uma série de tempo de funções que por elas
mesmos não estão prontas para poder operar quando o tempo é uma dimensão variante. Veja os
exemplos abaixo.
Notas De Uso
1) O função tloop laça através do tempo baseado no incremento de tempo do arquivo padrão; é então
importante ter o arquivo padrão atribuído apropriadamente.
2) O função tloop e o comando define trabalham muito similarmente. Em muitos casos, o comando
define pode ser usado para obter o mesmo resultado que quando usando tloop. De fato, o comando
define pode ser ainda mais útil ao longo de algumas linhas, desde que isto também lace através da
dimensão de Z, em efeito criando uma função zloop. Veja o comando define para maiores
informações.
81
Exemplos
1) Uma típica aplicação da função tloop é calcular uma série de tempo de média de área usando a
função aave. Desde que a função aave não irá funcionar quando o tempo é uma dimensão variante,
o uso do tloop é necessário:
set x 1
set y 1
set t 1 31
d tloop(aave(ts,lon=0,lon=360,lat=-90,lat=90))
Note que o ambiente dimensionado está montando para refletir o tipo de plotagem desejada, a
saber uma plotagem de linha onde o tempo é a dimensão variante. Assim é necessário fixar as
dimensões X e Y; os valores destas dimensões neste caso não são relevantes. Usando define podese alcançar o mesmo efeito, i.e.,
define t=aave(ts,lon=0,lon=360,lat=-90,lat=90)
dt
2) A função tloop pode estar usada para suavizar no tempo:
set lon -180 0
set lat 40
set lev 500
set t 3 28
d tloop(ave(z,t-2,t+2))
Neste exemplo, foi plotado um corte transversal de tempo-longitude, onde cada tempo é uma
média de um período de 5 tempos centrado naquele tempo.
3) Pode-se desejar exibir um corte transversal tempo-longitude (com X e T variando), com os dados
sendo avaliados sobre a latitude, o modo 'padrão' para fazer isto poderia ser:
set lon -180 0
set lat 40
set lev 500
set t 1 31
d ave(z,lat=20,lat=40)
Este cálculo pode estar consumindo um tempo razoável, desde que para desempenhar a média,
uma seção longitude-tempo é obtida em cada latitude. Se o período de tempo é longo, então este
será uma operação muito ineficiente, devido a ordem dos dados em um típico conjunto de dados do
GrADS. A função tloop poderá substancialmente melhorar a performance deste cálculo:
d tloop(ave(z,lat=20,lat=40))
desde que a media é então feita em cada tempo fixo, e é desta forma somente uma média de X
variando dados sobre Y. Assim a função tloop aqui está simplesmente sendo usada para forçar um
diferente ordem para o cálculo, embora o resultado seja o mesmo.
82
Funções de Dados de Estação
gr2stn
gr2stn(grid_expr,stn_expr)
Desempenha uma interpolação de espaço de grade para localizações de estações, onde:
grid_expr é qualquer expressão do GrADS válida que dá um resultado em grade. A interpolação
será feita usando a grade destes dados.
stn_expr
é qualquer expressão do GrADS válida que dá um resultado em dados de estação.
A interpolação será feita para essas localizações de estações, o valor do dado de estação não é
usado.
O resultado da função são dados de estação. A interpolação é feita bi-linearmente dentro do espaço de
grade. Nenhuma ponderação é feita justificando o sistema de coordenadas globais.
Exemplos
1) Para examinar a diferença entre uma análise (i.e., dados em grade) e as observações originais,
pode-se fazer:
d t.3-gr2stn(t.1,t.3)
onde o arquivo 1 é de dados em grade e o arquivo 3 é de dados de estação. O resultado exibirá
como diferenças na localização da estação.
2) Para exibir a diferença calculada no Exemplo 1 como um campo de contorno, deve ser usada a
função oacres para fazer uma análise rápida dos valores de estação:
d oacres(t.1,t.3-gr2stn(t.1,t.3))
oacres
oacres(grid_expr,stn_expr<,radii<first guess>>)
Uma análise objetiva de cressman é desempenhada nos dados de estação para produzir um resultado
em grade representando os dados de estação:
grid_expr uma expressão que tem um resultado de dados em grade. Os valores atuais da grade
são ignorados; a grade é usada como um modelo para desempenhar a analise. A escala desta
grade deve ser linear em lat-lon.
stn_expr uma expressão que tem um resultado de dados estação. O dado de estação é analisados
para a grade.
radii
raio de influencia opcional. Raios múltiplos são usualmente fornecidos, separado por
virgula. Se não for fornecido, os raios padrão usados estão em unidades de grade: 10,7,4,2,1. O
terceiro raio especificado é especial, neste quaisquer pontos de grade que não tem estações
dentro deste raio são atribuídos para valores de dados ausentes. Veja abaixo para uma discussão
do raio de influência.
O esquema da Análise de Cressman é descrito em um trabalho no Monthly Weather Review, 1959.
Em resumo, múltiplas passagens são feitas através da grade em subsequentes raios menores de
influência. Em cada passagem, um novo valor é determinado para cada ponto de grade pela chegada a
um fator de correção para aquele ponto de grade. Este fator de correção é determinado por olhar em
cada estação dentro do raio de influência do ponto de grade. Para cada tal estação, um erro é calculado
como a diferença entre o valor da estação e um valor conseguido por interpolação da grade para esta
estação. Uma fórmula de distância ponderada é então aplicado para todos os tais erros dentro do raio
de influência do ponto de grade para chegar em um valor de correção para aquele ponto de grade. Os
fatores de correção são aplicados para toda grade antes da próxima passagem ser feita.
83
Notas de Uso
1) A função oacres pode ser muito lenta para ser usada, dependendo da grade e os dados de estação.
2) O esquema de Análise de Cressman pode ser instável se a densidade de grade é substancialmente
mais alta do que a densidade de dados de estação (i.e., muitíssimo mais pontos de grade do que
pontos de dados de estação). Em tais casos, a análise pode produzir extremos valores de grade que
não são realísticos. Sugere-se que os resultados do oacres sejam examinados e compare estes aos
dados de estação para assegurar que eles encontram-se nas necessidades.
3) No general, a análise objetiva é um tópico complexo, e muitos esquemas para fazer isto tem sido
desenvolvido atualmente. A função oacres é fornecida mais como um rápida olhada nas
características propriamente do que uma esquema de análise rigorosa. Se houver necessidade de
análise específica, considere fazer sua análise objetiva exterior ao GrADS com programas de
propósito especiais.
Exemplos
1) No caso mais simples:
oacres(ts,ts.2)
2) Para especificar outros raios de influência:
oacres(ts,ts.2,12,8,5,4,3,2,1)
3) Atribuindo o first guess no oacres
oacres atribui um valor inicial da grade de análise para a média aritmética das observações na área.
Para quantidades positivas definidas como precipitação, isto pode produzir uma análise irrealista
em regiões de nenhuma observação (i.e., nenhuma chuva é melhor guess que média da chuva).
A chamada para o oacres (suporta para analise de exame Cressman r**2) tem a forma,
d oacres(grade,obs,r1,r2,r3,...,r30)
onde:
grade é uma grade para na qual a obs será analisada
obs
é a obs "grade"
r1,...,r30
são os raios de exame em UNIDADES DE GRADE.
Os raios de exame padrão são:
r1=10.0
r2=7.0
r3=4.0
r4=2.0
r5=1.0
ou cinco raios. Este é bom para campos meteorológicos, mas pode produzir uma análise não
desejável para campos hidrológicos os quais não são contínuos. O número de raios pode ser
mudado, subindo até um máximo de 30, para acomodar as necessidades de tipos diferentes de
dados de estação.
Para mudar o first guess, atribui-se o penúltimo r para -1 e o último r para o desejado first guess.
Por Exemplo,
'd oacres(pr.1,pr.2,5,4,-1,-0.01)'
fará uma análise da obs pr.2 para a grade pr.1 com 2 raios de exame de 5 e 4 unidades de grade
com um first guess de -0.01. Um first guess de 0 pode ser usado para reduzir a tendência do
84
oacress em criar olhos artificiais para campos com descontinuidade espacial tais como chuva.
Erros na atribuição do first guess produz o oacres padrão.
stnave
stnave(expr,dexpr1,dexpr2<,-m cnt>)
Toma uma média de dados de estação sobre o tempo:
expr
uma expressão do GrADS válida que dá um resultado de dados de estação.
dexpr1
uma expressão de dimensão dando o tempo inicial para a média.
dexpr2
uma expressão de dimensão dando o tempo final para a média.
m cnt
conta mínima de dados opcional para a média ser calculada. Se, na série de tempo, há
um número menor de pontos de dados disponíveis para uma particular estação do que o valor
de cnt, então o resultado para aquela estação é o valor de dados ausentes. O valor padrão de cnt
é 1 (i.e., até mesmo 1 estação válida em uma série de tempo de ate mesmo milhares de pontos
dará um resultado válido para aquela estação).
Notas de Uso
1) Os tempos são laçados baseados no intervalo de tempo do arquivo padrão. É desta forma muito
importante atribuir o arquivo padrão para aquele do arquivo de dados de estação, ou um arquivo o
qual tem o mesmo intervalo do tempo, ou nem todas as observações serão incluídas na média.
2) Se há mais que uma observação por estação para um tempo particular, destas observações são
calculadas a média igualmente para chegar em um único valor para aquele tempo. A média final
consiste de cada observação para cada tempo sendo calculado a média, com os tempos ausentes
não incluídos na média.
3) Observações de tempos diferentes são considerados ser da mesma estação quando o id da estação, a
latitude, e a longitude todas combinam exatamente.
Exemplos
1) Um uso típico da função stnave poderia ser:
stnave(ts,t=1,t=20,-m 10)
Aqui uma media é tomada sobre 20 tempos, e se há menos que 10 boletins para uma estação então
aquela de estação estará ausente no resultado final.
stnmin
stnmin(expr,dexpr1,dexpr2<,-m cnt>)
Examina uma série de tempo de dados de estação e retorna o valor mínimo encontrado para cada
estação. Operandos e formas de uso são os mesmos como na função stnave; veja acima.
stnmax
stnmax(expr,dexpr1,dexpr2<,-m cnt>)
Examina uma série de tempo de dados de estação e retorna o valor máximo encontrado para cada
estação. Operandos e formas de uso são os mesmos como na função stnave; veja acima.
85
Funções Vetoriais
hcurl
hcurl(uexpr,vexpr)
Calcula a componente vertical da espiral (i.e., vorticidade) em cada ponto de grade usando
diferenciamento finito nas providas grades. É assumido que uexpr dá a componente U do vento, e que
vexpr fornece a componente V do vento.
Notas de Uso
1) O algoritmo usado para o cálculo da diferença finita está descrito como um Exemplo para a função
cdiff.
2) A função assume um ambiente de dimensão com X-Y variante, e não operará a menos que este seja
o caso. O comando define pode ser usado em conjunto com a função hcurl e criar campos de
vorticidade de 3 ou 4 dimensões, dos quais cortes transversais podem ser exibidos.
3) As grades limites são atribuídas para dados ausentes
4) O raio da terra usado no cálculo está em metros; assim as unidades das expressões de vento
fornecidas serão normalmente em m/s.
Exemplos
1) Para exibir a vorticidade:
d hcurl(u,v)
2) Para exibir um corte transversal vertical de vorticidade, primeiro é necessário calculá-lo para uma
região de 3 dimensões:
set lon 0 360
set lat -90 90
set lev 1000 100
define vort = hcurl(u,v)
set lon -90
d vort
hdivg
hdivg(uexpr,vexpr)
Calcula a divergência horizontal usando diferenciação finita. Exatamente o mesmo como hcurl em
todos os aspectos; veja a Nota de Uso e os Exemplos acima.
Notas de Uso
1) A estabilidade numérica de calcular divergência horizontal usando diferenciação finita é muito
baixo. Portanto esta função deve ser usada com cuidado.
mag
mag(uexpr,vexpr)
Desempenha o cálculo: sqrt(uexpr*uexpr+vexpr*vexpr). Pode ser usado com dados de grade ou dados
86
de estação.
87
21.0 Funções Definidas pelo Usuário (UDFs):
Os usuários podem escrever suas próprias funções do GrADS na linguagem de computador de sua
escolha, e ter estas disponíveis pela facilidade de expressão do GrADS (via o comando display).
Algumas possíveis funções definidas pelo usuário poderão ser:
• funções de filtro
• funções de interpolação de grade
• funções de termodinâmica
Um função escrita pode ser invocada via a facilidade de expressão do GrADS. Esta função pode ser
escrita em qualquer linguagem de computador, e pode desempenhar qualquer desejado I/O, cálculos,
etc. Leia a seguinte documentação cuidadosamente para compreender as restrições desta
capacidade.
Resumo das Funções Definidas pelos Usuários
Os passos que o GrADS usa para invocar uma função definida pelo usuário são:
1) Quando GrADS é iniciado, ele lê um arquivo que descreve as funções definidas pelo usuário. Este
arquivo é chamado de 'tabela de funções definidas pelo usuário'.
2) Quando uma função do usuário é invocada via a expressão de comando na tela, o GrADS analisa
gramaticalmente os argumentos para as funções, obtém os resultados de quaisquer expressões, e
escreve os dados resultantes para um 'arquivo transferência de dados da função'.
Note que em uma função definida pelo usuário adicionando a citação a dupla apóstrofe ("") em torno
de um argumento de char passa o conjunto de caracteres diretamente sem a conversão usual para o
mas baixo caso e remove os caracteres em branco, i.e.:,
d grhilo(slp,F8.2,"Isto é o Rótulo",0.25)
Aqui F8.2 é passado como f8.2, mas o segundo conjunto de caracteres não será convertido para
istoeumrotulo.
3) Um programa escrito pelo usuário é então invocado. Este programa pode ler o arquivo transferência
de dados da função, fazer qualquer desejado processamento e então escrever o resultado dentro do
arquivo resultado da função.
4) O GrADS irá ler a arquivo resultado da função e gerar os objetos internos necessários para este
resultado participar no restante da avaliação da expressão.
A Tabela das Funções Definidas pelo Usuário
A tabela da função definida pelo usuário é um simples arquivo de texto que contem informações sobre
cada função definida pelo usuário. Há cinco registros para cada função definida, e o arquivo pode
conter descrições para qualquer número de funções.
Os 5 registros são:
Registro 1: Este registro contem vários campos brancos delimitando os campos:
Campo 1: O nome da função tem de 1 a 8 caracteres, começando com una letra. O nome
deverá estar no caso baixo . Note que os nomes das funções não são dependentes dos casos,
e que o GrADS converte toda expressão para o caso baixo antes da avaliação.
Campo 2: Um valor inteiro, especificando o número mínimo de argumentos que a função
pode ter.
Campo 3: Um valor inteiro, especificando o número máximo de argumentos que a função
88
pode ter. Este não pode ser maior que 8.
Campo 4 para N: Uma palavra-chave descrevendo o tipo de dados de cada argumento:
expr: O argumento é uma expressão.
valor: O argumento é um valor de dados.
char: O argumento é um conjunto de caracteres.
Registro 2: Este registro contem vários campos vazios delimitando as opções de palavraschaves. Atuais opções:
sequential
o GrADS escreverá os dados para o arquivo transferência de dados da função
em registros seqüenciais não formatados do FORTRAN.
direct
o GrADS escreverá os dados para o arquivo transferência de dados da função
sem quaisquer registros descritor de palavras.
Note: sequential é tipicamente apropriado se a rotina da função é escrita em FORTRAN.
direct é mais apropriado em C.
Registro 3: Este registro contém o nome do arquivo da rotina executável da função. Esta rotina
será iniciada com o seu próprio separado processo via a chamada do 'system'. Faça um 'man
system' para mais informações sobre as regras que governam as características deste sistema.
Registro 4: Este registro contém o nome do arquivo transferência de dados da função. Isto é o
arquivo onde o GrADS escreverá os dados para depois invocar a função executável do usuário, e
é tipicamente o arquivo que a função lerá para obter os dados para que sejam efetuados os
cálculos.
Registro 5: Este registro contém o arquivo que especifica o arquivo resultado da função. A
função escreve o resultado de suas operações dentro deste arquivo em um formato especificado, e
o GrADS lê este arquivo para obter o resultado do cálculo de uma função.
A tabela de funções definidas pelo usuário, por ela mesma, está apontada para a variável de ambiente
GAUDFT. Se esta variável não está atribuída, a tabela da função não será lida. Um exemplo de
atribuição desta variável é:
setenv GAUDFT /usr/local/grads/udft
As funções definidas pelo usuário têm precedência sobre as funções intrínsecas do GrADS, assim uma
função definida pelo usuário pode ser montada para repor uma função do GrADS. Assim não haverá
problema se for escolhido uma função especifica já em uso pelo GrADS.
Formato do arquivo transferência de dados da função
Os arquivo transferência de dados da função contém um registro de cabeçalho único, então contém
um ou mais registros representando cada argumento da função. A rotina da função do usuário saberá
que tipos de dados esperar (desde que eles sejam especificados na TFDU), e pode ler o arquivo em um
modo previsível. O formato do arquivo pode parecer algo complexo a princípio, mas após exemplos
mostrarão que isto não é tão mau como isto pode parecer a princípio.
Registo de Cabeçalho: O cabeçalho tem 20 números em ponto flutuante. O registro sempre terá o
mesmo tamanho. Os valores definidos neste registro são:
1º. valor: Número args do usuário usados quando invocando a função
2º. valor: Atribuído para zero, para indicar que este é um formato particular de arquivo
transferência. A função deverá testar este valor, e voltar um erro se esta for diferente de zero, na
seqüência ser compatível com os incrementos futuros para este formato de arquivo.
Valores 2 para 20: Reservado para uso futuro.
89
Registros do Arg: Cada tipo de argumento resultará em um específico conjunto de registros
sendo escritos. Os registros são escritos na ordem que os argumentos são apresentados. Para
cada tipo de dado:
valor: Um registro será escrito contendo um único valor em ponto flutuante.
char:
Um registro será escrito contendo o valor de caracter do argumento particular. O
comprimento do registro será 80 bytes. Se o argumento é mais longo, os bytes puxados
serão perdidos. Se o argumento é mais curto, este será aumentado com espaços em
branco. Note que o argumento já estará processado pelo analisador gramatical de
expressão do GrADS para alguma extensão, o qual irá converter todos os caracteres para
o caso baixo e remover quaisquer caracteres em branco.
expr:
Quando o argumento é uma expressão, o GrADS avaliará a expressão e escreverá
o resultado no arquivo de transferência. Atualmente somente dado em grade é suportado.
Vários registros serão escritos no arquivo para cada argumento de tipo expr:
1º. registro: O registro de grade. Este registro contém 20 valores, todos em ponto
flutuante. Note que algum dos valores são essencialmente inteiros, mas por
conveniência eles são escritos como um vetor em ponto flutuante. Atenção
apropriada deverá ser tomada convertendo esses valores de volta para inteiro.
1: Valor indefinido para a grade
2: i dimensão (idim). Dimensões são:
1 - Nada
0 - dimensão do X (lon)
1 - dimensão do Y (lat)
2 - dimensão do Z (lev)
3 - dimensão do T (tempo)
3: dimensão do j (jdim). Note: se idim e jdim são -1, a grade é um único valor. Se
jdim é -1, a grade é de uma 1-D de grade.
4: número de elementos na direção i (isiz)
5: número de elementos na direção j (jsiz). Arranjo é dimensionado (isiz,jsiz).
6: bandeira de dimensão linear i. Se 0, a dimensão tem escala não-linear.
7: bandeira de dimensão linear j.
8: istrt. Este é um valor em coordenadas globais da primeiro dimensão i,
SOMENTE se a dimensão i tem escala linear e a dimensão i não é tempo.
9: iincr. Incremento na dimensão i de coordenadas globais. SOMENTE se a
dimensão i tem escala linear.
10: jstrt. Coordenadas globais da primeira dimensão j, somente se a dimensão j tem
escala linear, e a dimensão j não é tempo.
11: jincr. Incremento de coordenadas globais para dimensão j.
12: Se uma das dimensões é tempo, os valores de 12 a 16 são definidos como o
tempo inícial:
12: é o ano inicial.
13: mês inicial
14: dia inicial
15: hora inicial
16: minuto inicial
17: Os valores 17 e 18 contêm o incremento de tempo para a dimensão do tempo.
17: contêm o incremento em minutos.
18: incremento em meses. (O GrADS trata todos os incrementos em termos de
minutos e meses).
19,20: reservado
90
2º. Registro:
Este contem os dados em grade. Isto é o número isiz*jsiz de elementos
em ponto flutuante.
Possível 3º. registro. Se a escala da dimensão i ou j é não linear, o valor em coordenada
global em cada valor integral de dimensão i(j) é escrito. Assim, se a dimensão i é não
linear, o número isiz de elementos é escrito. Se a dimensão do j é não linear (e a
dimensão de i É linear), então jsiz elementos serão escritos.
Possível 4º. registro. Somente escrito se ambas as dimensões i e j tem escala não linear.
Neste caso, este registro contem valores de coordenadas globais da dimensão j;
número jsiz de elementos de ponto flutuante.
A existência dos 3º. ou 4º. registro pode somente ser determinada por examinar o conteúdo do
registro de cabeçalho de grade. Note que a dimensão do tempo é sempre linear como atualmente
implementada no GrADS.
Note que não é necessário para a função tratar todas as possíveis perturbações de argumento de dados.
A função pode testar para certas condições e retornar um código de erro se aquelas condições não são
encontradas.
Formato do arquivo resultado da função
O arquivo resultado da função retorna o resultado de uma função para o GrADS. É responsabilidade
do processo da função escrever este arquivo no formato próprio. Um arquivo escrito em um formato
impróprio pode causar problemas ao GrADS, ou produzir resultados incorretos.
O resultado de uma função é sempre uma grade. Assim, o formato do arquivo resultado de uma
função é:
Primeiro, um registro de cabeçalho.
Este registro contem 20 valores de ponto flutuante. O primeiro valor contem o código de
retorno. Qualquer valor diferente de zero causa ao GrADS assumir para a função detectada
um erro, e o GrADS não lê qualquer outro além para a saída. O segundo valor deve
atualmente sempre ser atribuído para zero (indicando um simples arquivo resultado), e
valores 3 para 20 são reservados para uso futuro.
Próximo, um conjunto de registros de grade
Esses registros estão exatamente na mesma ordem e formato como no arquivo de
transferência de dados. (Note que se a função está retornando uma grade que tem a mesma
escala e ambiente de dimensão como um argumento de grade, os registros para aquele
argumento de grade podem ser escritos para o arquivo de resultado sem modificação somente os dados necessitam mudança).
Exemplo: Função de regressão linear
Isto é um exemplo simples de que uma função definida pelo usuário poderia parecer como em
FORTRAN. Este é uma função de regressão linear simples, que trata somente uma grade 1-D e toma
um argumento, e uma expressão.
Primeiro, a tabela de definição da função:
linreg 1 1 expr
sequential
/mnt/grads/linreg
/mnt/grads/linreg.out
/mnt/grads/linreg.in
91
O programa em FORTRAN está compilado, e chamado de linreg e colocado em /mnt/grads. O fonte
do programa é:
c
c
real vals(20),ovals(20)
real x(10000),y(10000)
open (8,file='/mnt/grads/linreg.out',form='unformatted')
open (10,file='/mnt/grads/linreg.in',form='unformatted')
read
read
idim
jdim
(8)
(8) vals
= vals(2)
= vals(3)
c
c
c
Se este nao é uma grade 1-D, escreve uma mensagem de erro e sai
c
c
c
Se a grade é muito grande, escreve mensagem de erro e sai
c
c
c
Lê os dados
c
c
c
Le escala não linear se necessário
if (idim.eq.-1 .or. jdim.ne.-1) then
write (6,*) 'Erro do linreg: Dimenção de Ambiente Inválida
vals(1) = 1
write (10) vals
stop
endif
isiz = vals(4)
if (isiz.gt.10000) then
write (6,*) 'Erro do linreg: Grade muito grande'
vals(1) = 1
write (10) vals
stop
endif
read (8) (y(i),i=1,isiz)
ilin = vals(6)
if (ilin.eq.0) then
read (8) (x(i),i=1,isiz)
else
do 100 i=1,isiz
x(i) = i
100
continue
endif
c
c Faz a Regressão linear
c
call fit (x,y,isiz,a,b)
c
c Preenche os valores de Dados
c
do 110 i=1,isiz
y(i) = a+x(i)*b
110 continue
c
c escrve info de retorno. O cabeçalho e a escala não linear
c info será o mesmo como o qual o GrADs nos deu.
c
ovals(1) = 0.0
92
c
write (10) ovals
write (10) vals
write (10) (y(i),i=1,isiz)
if (ilin.eq.0) write(10) (x(i),i=1,isiz)
stop
end
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
SUBROUTINE FIT(X,Y,NDATA,A,B)
C
C A é o interceptado
C B é o slope
C
REAL X(NDATA), Y(NDATA)
C
SX = 0.
SY = 0.
ST2 = 0.
B = 0.
DO 12 I = 1, NDATA
SX = SX + X(I)
SY = SY + Y(I)
12 CONTINUE
SS = FLOAT(NDATA)
SXOSS = SX/SS
14
DO 14 I = 1, NDATA
T = X(I) - SXOSS
ST2 = ST2 + T * T
B = B + T * Y(I)
CONTINUE
B = B/ST2
A = (SY - SX * B)/SS
RETURN
END
93
22.0 Recursos Adicionais do Conjunto de Dados no GrADS
Este capítulo fornece mais informação sobre como controlar e especificar conjunto de dados no
GrADS. Enquanto o material no Capítulo 4 é fundamental para usar o GrADS, a informação presente
aqui dá acentuada flexibilidade e controle do conjunto de dados o qual muitos usuários não irão
imediatamente necessitar. Uma total compreensão dos conteúdos do Capítulo 4 Usando arquivos de
dados no GrADS é assumida.
Cabeçalhos de grupos de arquivo e tempo
Pode ser indicado ao GrADS que um arquivo de dados tem um cabeçalho. Inclua o registro no
arquivo descritor:
fileheader comprimento
onde comprimento é o número de bytes no cabeçalho. O GrADS irá pular este cabeçalho, então tratar
o arquivo como se este fosse um arquivo normal do GrADS depois deste ponto. Esta opção é válida
somente para conjuntos de dados do GrADS em grade.
Controle do formato/estrutura da variável
Este recurso permite controle da estrutura e formato de cada variável.
Em um arquivo descritor de dados do GrADS cada variável é definida usando a seguinte sintaxe,
vname nlevs unids1,unids2,unids3,unids4 vdesc onde:
vname
o nome como este está referenciado no GrADS
nlevs
o número de níveis verticais ou dimensão de Z
unids?
uma seqüência de um para quatro inteiros usado para definir a variável para o
processo GRIB e para tratamento especializado.
Esses recursos são invocados através dos parâmetros unids? segundo a seguinte sintaxe:
-1,xx,yy onde:
xx = estrutura
yy = atributos adicionais
-1 é usado para indicar ao GrADS que um formato especial está acontecendo.
Há quatro estruturas suportadas......
1) xx = 10
Dados onde a variável e os níveis são transpostos, (lon,lat,var,lev,tempo em vez de
lon,lat,lev,var,tempo). Por Exemplo, supondo as quatro variáveis abaixo,
u(x,y,z),v(x,y,z),t(x,y,z),z(x,y,z)
para escrevê-los out/in assim eles podem ser vistos no GrADS.
No FORTRAN você teria,
parameter (ni=144,nj=91,nk=18,nt=4)
dimension u(ni,nj,nk),v(ni,nj,nk),t(ni,nj,nk),z(ni,nj,nk),dum(ni,nj)
do n=1,nk
call load(u,ni,nj,nk,n,dum)
94
write(10) dum
end do
do n=1,nk
call load(v,ni,nj,nk,n,dum)
write(10) dum
end do
do n=1,nk
call load(t,ni,nj,nk,n,dum)
write(10) dum
end do
do n=1,nk
call load(z,ni,nj,nk,n,dum)
write(10) dum
end do
subroutine load(a,ni,nj,nk,n,dum)
dimension a(ni,nj,nk),dum(ni,nj)
do i=1,ni
do j=1,nj
dum(i,j)=a(i,j,n)
end do
end do
return
e o .ctl pareceria algo como:
dset ^model.dat
title alguns modelos de dados
undef 0.10000E+16
options sequential
xdef 144 linear 0 2.5
ydef 91 linear -90 2.0
zdef 18 levels
1000.000 950.000 900.000 850.000 800.000 700.000 600.000 500.000
400.000 300.000 250.000 200.000 150.000 100.000 70.000 50.000
30.000 20.000
tdef 4 linear apr85 1mo
vars 4
u 18 0 component u do modelo da NASA
v 18 0 component v do modelo da NASA
t 18 0 temperatura do modelo da NASA
z 18 0 altura geopotencial do modelo da NASA
endvars
Entretanto, no formato "phoenix" GCM da NASA, para somente as variáveis do programa de ar
superior, eles tem,
do n=1,nk
call load(u,ni,nj,nk,n,dum)
write(10) dum
call load(v,ni,nj,nk,n,dum)
write(10) dum
call load(t,ni,nj,nk,n,dum)
write(10) dum
call load(z,ni,nj,nk,n,dum)
write(10) dum
end do
Assim, as variáveis e z são tranpostas ou todas as variáveis são escritas: um nível em um
tempo....
95
Para fazer problemas mais elaborados, aos diagnósticos de ar superior, o formato da NASA
reverte a convenção do GrADS, assim agora necessita-se contar ao GrADS que a var-z
transposta não está funcionando...
Para tratar as variáveis do programa de ar superior, e então diagnósticos de ar superior (i.e.,
cuheat e nuvens), no arquivo .ctl:
dset ^model.nasa.dat
title algum modelo de dados da NASA
undef 0.10000E+16
options sequential
xdef 144 linear 0 2.5
ydef 91 linear -90 2.0
zdef 18 levels
1000.000 950.000 900.000 850.000 800.000 700.000 600.000 500.000
400.000 300.000 250.000 200.000 150.000 100.000 70.000 50.000
30.000 20.000
tdef 4 linear apr85 1mo
vars 6
u
18 -1,10,1 componente u do modelo da NASA
v
18 -1,10,1 componente v do modelo da NASA
t
18 -1,10,1 temperatura do modelo da NASA
z
18 -1
,10,1 altura geopotential do modelo da NASA
cuheat 18 -1,10,2 cumulus heating
clouds 18 -1,10,2 fração de nuvens
endvars
Assim,
yy = 1 significa que as variáveis têm sido transpostas var-z
yy = 2 significa que as variáveis são agora "normais"
2) xx = 20
Este trata de variáveis 4-D, i.e., todos os tempos para um variável são escritas em um pedaço
grande como oposto para escrever para todas variáveis em um tempo e então todas as variáveis
no próximos tempo. Do exemplo prévio, é assumido agora ter dados nos tempos nt...
Em um modelo típico temos,
parameter (ni=144,nj=91,nk=18)
dimension u(ni,nj,nk),v(ni,nj,nk),t(ni,nj,nk),z(ni,nj,nk),dum(ni,nj)
do l=1,nt
C run model and update the prog variables
call prog(u,v,t,z)
do n=1,nk
call load(u,ni,nj,nk,n,dum)
write(10) dum
end do
do n=1,nk
call load(v,ni,nj,nk,n,dum)
write(10) dum
end do
do n=1,nk
call load(t,ni,nj,nk,n,dum)
write(10) dum
96
end do
do n=1,nk
call load(z,ni,nj,nk,n,dum)
write(10) dum
end do
end do
E não haverá problema para ler estes dados no GrADS, mas supondo agora ler a saída do modelo e
escrever os dados u,v e t diferentemente,
parameter (ni=144,nj=91,nk=18,nt=4)
dimension u(ni,nj,nk),v(ni,nj,nk),t(ni,nj,nk),z(ni,nj,nk),dum(ni,nj)
open (10...)
open (12...)
do l=1,nt
C write out all the u's
do n=1,nk
read(10) dum
write(12) dum
end do
do n=1,nk
read(10) dum
end do
do n=1,nk
read(10) dum
end do
do n=1,nk
read(10) dum
end do
end do
rewind 10
C now write out all the v
do l=1,nt
do n=1,nk
read(10) dum
end do
do n=1,nk
read(10) dum
write(12) dum
end do
do n=1,nk
read(10) dum
end do
do n=1,nk
read(10) dum
end do
end do
rewind 10
C now write out all the t
do l=1,nt
do n=1,nk
read(10) dum
end do
do n=1,nk
read(10) dum
end do
do n=1,nk
read(10) dum
write(12) dum
97
end do
do n=1,nk
read(10) dum
end do
end do
Enquanto isto parece não natural para um modelo, alguns conjuntos de dados parecem como este
com várias variáveis contendo todos os tempos.
O arquivo .ctl do GrADS para o exemplo acima, poderá ser:
undef 0.10000E+16
options sequential
xdef 144 linear 0 2.5
ydef 91 linear -90 2.0
zdef 18 levels
1000.000 950.000 900.000 850.000 800.000 700.000 600.000 500.000
400.000 300.000 250.000 200.000 150.000 100.000 70.000 50.000
30.000 20.000
tdef 4 linear apr85 1mo
vars 3
u 18 -1,20 componente u do modelo da NASA
v 18 -1,20 componente v do modelo da NASA
t 18 -1,20 temperatura do modelo da NASA
endvars
A opção sequential é atribuída porque escrevemos os dados usando I/O não formatado (f77).
Agora suponha usar a opção template no tempo. Use yy para indicar ao GrADS quantos tempos
há em cada arquivo, i.e.,
dset ^mydate.%y2.dat
options sequential template
tdef 120 linear jan79 1mo
vars 3
u 18 -1,20,12 u component
v 18 -1,20,12 v component
t 18 -1,20,12 temperature all
endvars
yy=12 conta ao GrADS que há 12 mês em cada arquivo.
3) xx = 30
Este trata um caso patológico onde lon e lat são transpostos (lat,lon) como opostos para dados
(lon,lat). Enquanto este faz "o trabalho" ele é muito ineficiente porque haveria a necessidade de
uma grande mudança interna no I/O do GrADS para tratar este caso raro.
Entretanto, isto é útil para inspeção inicial e verificação de erro e é somente para isto que ele é
projetado. Aqui está um exemplo do arquivo do .ctl
dset ^latlon.dat
titleteste de caso de dados onde lat and lon are transpostos a(j,i) versos a(i,j)
98
undef 1e20
xdef 144 linear 0 2.5
ydef 73 linear -90 2.5
zdef 1 levels 1013
tdef 1 linear 00z1jan1995 12hr
vars 1
u 0 -1,30 u comp
endvars
4) xx = 40
Esta opção trata de dados não flutuantes pela conversão interna para flutuante após a leitura.
Há duas opções (yy)
yy=1
yy=4
-um-byte não formatado ints (0-255)
-dados inteiros (4 byte em máquinas de 32-bit e 8-byte nas crays)
O primeiro caso foi tratar dados do GMS em um CD-ROM do MRI no Tsukuba, Japão. Aqui está
o arquivo gms .ctl:
dset ^I921110.Z12
undef 1e20
title GMS imagem IR durante TOGA COARE
fileheader 500
options yrev
xdef 500 linear 130.05 0.1
ydef 300 linear -14.95 0.1
zdef 1 levels 1013
tdef 1 linear 00Z1nov1992 12hr
vars 1
tb 0 -1,40,1 IR temperatura do brilho - 100 K
endvars
A opção yy=4 tem sido usada para dados inteiros representando tipo de superfície...
Séries de tempo de múltiplos arquivos
O GrADS agora permite tratar muitos arquivos de dados atuais como um arquivo do GrADS, se os
arquivos de dados individuais estão em um formato legível do GrADS, e se os arquivos estão
divididos ao longo do tempo. Na implementação inicial, os tempos que estão em cada arquivo estão
indicados pelo nome do arquivo.
Um exemplo disto pode ser os dados de hora em hora, onde a cada 24 horas este é colocado em um
arquivo separado. Cada arquivo é especificado deste modo:
1may92.dat
2may92.dat
etc.
Indica-se ao GrADS que há múltiplos arquivos nesta série de tempo por dar um modelo de
substituição como o nome de arquivo:
dset %d1%mc%y2.dat
e dando um registro options que parece como:
99
options template
e especificando o limite e o incremento de tempo no registro do tdef:
tdef 72 linear 0z1may1993 1hr
O GrADS imaginará automaticamente que há 24 tempos em cada arquivo, e quais nomes de arquivos
correspondem para quais tempos. Quando os dados são exibidos, o GrADS vai somente abrir um
arquivo em um tempo. Quando os tempos são mudados tal que outro arquivo está sendo referido, o
arquivo aberto é fechado, e um novo arquivo é aberto.
Substituições válidas são:
%y2
%y4
%m1
%m2
%mc
%d1
%d2
%h1
%h2
%h3
%f2
%f3
%n2
- 2 dígitos para o ano(últimos 2 dígitos)
- 4 dígitos para o ano
- 1 ou 2 dígitos para o mês
- 2 dígitos para o mês (primeiro zero se necessário)
- 3 caracter para abreviação do mês
- 1 ou 2 dígito para o dia
- 2 dígitos para o dia
- 1 ou 2 dígitos para a hora
- 2 dígitos para a hora
- 3 dígitos para a hora(i.e., 120 ou 012)
- 2 ou 3 dígitos para hora de previsão
- 3 dígitos para hora de previsão
- 2 dígitos para o minuto ( primeiro zero se necessário)
para especificar o tempo inicial (i.e., saída do modelo NWP para NMC e FNMOC)
%iy2
%iy4
%im1
%im2
%in2
%imc
%id1
%id2
%ih1
%ih2
%ih3
- inicial 2 dígitos para o ano (últimos 2 dígitos)
- inicial 4 dígitos para o ano
- inicial 1 ou 2 dígitos para o mês
- inicial 2 dígitos para o mês (primeiro zero se necessário)
- inicial 2 dígitos para o minuto ( primeiro zero se necessário)
- inicial 3 caracter de abreviação de mês
- inicial 1 ou 2 dígitos para o dia
- inicial 2 dígitos para o dia
- inicial 1 ou 2 dígitos para a hora
- inicial 2 dígitos para a hora
- inicial 3 dígitos para a hora
(incremento do tempo deve ser horas)
Esta ajuda funciona com todos os tipos de dados suportados pelo GrADS (grades do GrADS, GRIB,
dados de estação do GrADS). Para especificar as opções de formato de arquivo, as opções devem se
aplicar igualmente para cada arquivo.
Os dados em tempo-real nas estações DEC usam este novo recurso. Veja os arquivos de descritores
de dados:
/dados/wx/grads/sa.ctl
/dados/wx/grads/sareps.ctl
/dados/wx/grads/wx.ctl
para exemplos adicionais.
100
Formatos e estruturas de dados acrescentadas
A camada I/O do GrADS tem sido modificado para tratar de tipos e estruturas extras de dados. Isto
foi inicialmente questionado pela necessidade para trabalhar com as reanálises do GSFC DAO da
NASA e da saída de dados do GCM por ser próprio formato "phoenix" e o Climate Analysis
Center’s Climate Diagnostic Data Base (CDDB). Essas opções definem características globais do
arquivo de dados......
No descritor de arquivo de dados as seguintes palavras-chaves foram acrescentadas,
theader ttttt
xyheader xxxxx onde:
ttttt
= o número de bytes do cabeçalho precedendo os dados para cada bloco de tempo
(i.e., cada 4-D lon,lat,lev,var no tempo)
xxxxx = o número de bytes do cabeçalho que precedem os dados para cada bloco xy (i.e.,
um campo 2-D lon/lat).
N.B. Usando esses recursos requer-se uma compreensão detalhada de seus dados! O GrADS lerá os
arquivos de dados exatamente do modo que são mostrados! Erros aqui vão prejudicar os resultados.
Um programa em FORTRAN para construir automaticamente o arquivo .ctl do formato phoenix da
NASA está disponível para [email protected].
101
23.0 Programando em GrADS: Usando a Linguagem de Script
A linguagem de script do GrADS, usada via o comando run do GrADS, fornece uma capacidade
similar ao comando exec, exceto que um script pode ter variáveis, controle de fluxo, e acesso ao
comando de saída do GrADS. Scripts podem ser escritos para desempenhar uma variedade de
funções, tais como permitir a um usuário apontar e clicar na tela para selecionar algo, animar
quaisquer quantidades desejadas, escrever nas plotagens informações obtidas do comando query do
GrADS.
Resumo da linguagem de script
A linguagem do script é parecida ao REXX em implementação. Todas variáveis são de tipo STRING.
Operações são suportadas nas variáveis do script. O controle de fluxo é alcançado via construções de
if/else/endif e while/endwhile. O loop de fluxo pode ser modificado pelos comandos continue ou
break. Os strings contidos em variáveis ou gerados via uma expressão podem ser emitidas ao GrADS
como comandos. O resultado destes comandos (o string que GrADS teria digitado no terminal) é
colocado dentro uma variável e feito avaliação para o script. A linguagem incluí suporte para
funções.
Elementos da linguagem
Um arquivo de script é dividido em registros. O fim de um registro de script é determinado ou por um
caracter de nova linha (fim do registro para o arquivo) ou um ponto e vírgula (onde o ponto e vírgula
não está contido dentro de um string constante).
Cada registro do script pode ser um dos seguintes tipos de registro de script:
•
•
•
•
•
•
designação
if / else / endif
while / endwhile / break / continue
function header / return
say / pull
comentário
Se um registro de script não é nenhum dos acima, é assumido ser um registro de declaração, o qual
contem uma expressão do script. O resultado da expressão é passado ao GrADS como um comando
para execução. O resultado texto do comando do GrADS é inserido na variável 'result' para ser
examinado pelo script.
Muitos dos tipos de registro acima irão conter expressões. Expressão de script são compostos de
operadores e operandos, onde os operandos são variáveis de script, chamadas de funções, ou
constantes, e os operadores são lógicos, matemáticos, ou operações de concatenação.
Não há nehum 'goto' nesta linguagem.
N.B. O GrADS necessita da presença de um return após a última linha de comando no arquivo do
script, de outro modo GrADS não executará esta linha de comando.
102
Variáveis
Os nomes das variáveis da linguagem de script tem de 1 a 8 caracteres, começando com um caracter
alfabético e contendo somente letras ou números. O nome é caso sensitivel.
Os conteúdos de uma variável de script são sempre um string de caracter. Para algumas operações, o
string de caracter será interpretado como um número.
Se uma variável não foi ainda designada, seu valor é seu nome.
Se o conteúdo de uma variável ou constante string é um número no formato correto, certos operadores
desempenharão operações numéricas, dando um string de resultado o qual também será um número.
Variáveis de string
Variáveis de string ou constantes de string são cercadas de citações simples ‘' ou duplas "" . Por
Exemplo:
nome = ‘Peter Pan’
nome = "Peter Pan"
Variáveis Predefinidas
Alguns nomes de variáveis estão predefinidos, é uma boa idéia evitar designar valores para estas
variáveis. As seguintes são variáveis predefinidas:
lat
lon
lev
result
rec
Variáveis globais do script
As variáveis do script são normalmente locais às funções em que elas estão contidas. Variáveis
globais do script estão também disponíveis. Elas são especificadas via o nome da variável. Qualquer
nome de variável começando com um sublinhado (_) será assumido ser uma variável global, e
guardará este valor do começo ao fim arquivo do script. Por Exemplo:
_var1 = " variável global 1"
N.B. as variáveis globais não podem ser usadas em cabeçalhos de função: Assim:
function dostuff(_var)
não faria sentido, desde que _var é uma variável global, e seria inválido se este fosse o único
argumento.
Variáveis compostas do script
A linguagem do script suporta variáveis compostas, que podem ser usadas para construir vetores em
scripts. Uma variável composta tem um nome de variável com segmentos separados por períodos. Por
exemplo:
varname.i.j
Neste caso, quando o conteúdo da variável é acessado, i e j serão procurados para ver se eles são
também variáveis (não compostas). Se eles são, i e j serão repostos pelo valor dos strings i e j.
103
Por Exemplo:
i = 10
j=3
varname.i.j = 343
No exemplo acima, a designação é equivalente à:
varname.10.3 = 343
Note que o valor dos strings i e j podem ser qualquer coisa, mas a especificação do nome da variável
no script deve seguir as regras para os nomes das variáveis: letras ou números, começando com letra.
O nome da variável após a substituição pode ser qualquer string:
i = 'a#$xx'
varname.i = 343
O acima é valido. Entretanto, não é permitido se referir para este nome de variável diretamente:
varname.a#$xx = 343
Os nomes de variáveis não podem ser mais longos que 16 caracteres, ou antes ou após a substituição.
Note que a linguagem de script do GrADS não é particularmente eficiente em tratar grandes números
de variáveis. Assim variáveis compostas não deveriam ser usadas para criar grandes vetores:
i=1
while (i<10000)
var.i = i
endwhile
O loop acima criará 10000 nomes de variáveis distintas. Tendo este número de variáveis na cadeia de
variáveis deixará o script muito lento. Se isto se mostra como uma pobre escolha de projeto, deixe-me
saber e eu considerarei a fazer a variável tratando-a de modo mais eficiente.
Operadores
Os seguintes operadores estão implementados:
|
&
!
=
!=
>
>=
<
<=
%
+
*
/
lógico OU
lógico E
unário NÃO
unário MENOS
igual
diferente
maior que
maior ou igual que
menor que
menor ou igual que
concatenação
adição
subtração
multiplicação
divisão
104
Os seguintes operadores desempenharão uma operação numérica se o operandos são numéricos:
=, !=,>,>=, <, <=, +, -, *, /
Se qualquer uma das seguintes operações são tentadas com um operando não numérico, um erro
resultará:
+, -, *, /
Operações de aritmética são feitas em ponto flutuante. Se o resultado é integral, o resultado de um
string é um inteiro.
Um operador lógico dará um caracter 0 (zero) se o resultado é FALSO, e um caracter 1 (um) se o
resultado é VERDADEIRO.
Expressões
Expressões de script consistem de operandos, operadores, e parêntesis.
O precedência de operadores é:
-, ! (Unário)
/, *
+, %
=, !=, , =, <, <=
&
|
Dentro do mesmo nível de precedência, as operações são desempenhados da esquerda para a direita.
Parêntesis modificam o pedido de operação segundo convenção padrão.
Operandos podem ser variáveis (discutidas a pouco), constantes de string, ou chamadas de função.
Constantes de strings são cercadas por um citação simples ou dupla. Constantes numéricas podem ser
entradas sem citações, mas são ainda consideradas constantes de string.
Um exemplo de uma constante de conjunto de caracteres:
'Isto é uma string'
A expressão inteira, incluindo todas chamadas de função, etc. serão desempenhadas para obter um
resultado. Por exemplo:
var1!='' & var1*var2<10
Nesta expressão, ambos os lados da operação lógica AND serão resolvidos, e a subexpressão à direita
pode resultar em um erro. Nestes casos, uma duplo aninhamento será requerido.
Em alguns casos, o operador de concatenação está contido. Isto toma lugar quando dois operandos se
limitam (com ou sem intervir caracteres em branco — os caracteres em branco são ignorados).
Por exemplo, as seguintes expressões têm o mesmo efeito:
var1%var2%'String' usa o operador de concatenação %
var1 var2'String'
concatenação implícita
dando:
‘var1var2String'
Deve ser lembrado a ordem de precedência para o operador de concatenação.
105
Chamadas de função tomam a forma de:
nome(arg,arg,arg,...)
onde o nome segue as mesmas regras como para nomes de variáveis, e os argumentos podem ser
expressões.
Controle de fluxo
Blocos if
O controle de fluxo pode ser controlado via a construção if/else/endif. O formato é:
if expressão
Deverá estar em registro separado
registro do script
registro do script
.
.
else
Opcional
registro do script
.
.
endif
Requerido!
Note que o seguinte registro de script é inválido:
if (i=10) j=20
Será necessário entrar três registros de script:
if (i=10)
j = 20
endif
Para entrar esses três registros de script na mesma linha:
if (i=10); j=20; endif;
A porção do bloco if executado conta com o resultado da expressão. Se a expressão resolve para um
string contendo o caracter 0, o 'else' da porção é executado. Se o string resultado for qualquer coisa
além disto, a porção 'if' é executada.
N.B. Não há nenhuma construção ELSE IF no GrADS.
Blocos While
A construção while é como segue:
while expressão
Em registro de script separado
registro de script
registro de script
.
.
endwhile
Requerido!
Enquanto a expressão é verdadeira — i.e., não é exatamente igual ao caracter 0 -- o loop é executado.
106
Dois comandos de script adicionais podem ser usados para modificar a execução do loop. break
terminará a execução do loop imediatamente. continue irá ramificar imediatamente e retornar para o
topo do loop, e a expressão será reavaliada.
Por exemplo:
t=1
while (t<10)
'set t 't
'display z'
if (rc!=0); break; endif;
t=t+1
endwhile
Funções
As funções podem ou estar contidas dentro do arquivo do script, ou podem ser uma função intrínseca.
As funções contidas dentro de outros arquivos de script não são suportados até agora (outros arquivos
de script podem ser executados via o comando run do GrADS).
Em um ou outro caso, as funções são invocadas como uma expressão de script que está sendo
avaliada. As funções de script tem um resultado de string único, mas pode ter um ou mais strings de
argumento. As funções são invocadas por:
nome(arg,arg,arg...)
Se a função tem nenhum argumento, deve-se ainda fornecer os parêntesis:
nome()
Pode-se fornecer funções dentro do arquivo do script pelo uso do registro de definição de função:
function nome(variável, variável, ...)
Para retornar de uma função, o comando return deve ser usado:
return expressão
A expressão é opcional; se não fornecida, um string NULO será retornado. (Um string nulo é: '') O
resultado da função é o resultado da expressão especificada no comando return
Quando uma função é invocada, os argumentos são avaliados, então controle de fluxo é transferido
para a função. As variáveis contidas na lista dentro do registro de definição de função são
inicializados aos valores de argumentos passados. Se tão poucos argumentos forem passado para as
específicas variáveis, as variáveis seguintes são não inicializadas. Se muitos argumentos são
passados, os argumentos extras são descartados.
As variáveis do registro da definição da função podem ser modificadas sem modificar as variáveis da
rotina chamada.
A extensão das variáveis é normalmente local à função, mas pode ser global.
Quando um arquivo de script é primeiramente invocado (via o comando run), a execução começa no
início do arquivo. Um registro de definição de função pode opcionalmente ser fornecido no início. Se
isto for feito, deverá especificar o nome de uma variável. Esta variável será inicializada para qualquer
opção do comando 'run'. Se nenhuma opção for dada, a variável será inicializada para o valor
NULO.
107
Designação
O formato do registro de designação é:
variável = expressão
A expressão é avaliada, e o resultado é designado ser o valor da variável indicada.
Padrão Entrada/Saída
Para escrever informações ou perguntas no terminal (saída padrão), devem ser usados os comandos
'say' ou ‘prompt’:
say expressão
prompt expressão
O resultado da expressão é escrita no terminal. O comando prompt trabalha do mesmo modo como
o comando say mas não anexa a presença do return.
Para ler a informação do terminal (entrada padronizada), deve ser usado o comando pull:
pull variável
O script pausa para entrada do usuário via teclado (até a presença do return), e o string digitado pelo
usuário é designado para o nome da variável indicada.
Por exemplo:
linha = " Peter Pan, um voador"
say linha
Para combinar variáveis e comentários quando escrevendo para saída padronizada:
say ‘Ela disse este é ‘ linha
dá:
Ela disse este é Peter Pan, um voador
Enviando comandos ao GrADS
O registro de declaração consiste unicamente de uma expressão:
expressão
A expressão é avaliada, e o string resultado é submetido ao GrADS como um comando.
Após este registro ser executado, é dado à variável 'result' do script o valor do resultado do comando
do GrADS (o resultado neste caso é o conjunto de caracteres que o GrADS teria digitado para o
terminal tendo o comando entrado interativamente). À variável de escrita 'rc' é dado o código de
retorno do comando do GrADS (este sempre será um valor de inteiro).
O resultado pode conter várias linhas de saída do GrADS. Essa será concatenada dentro um conjunto
de caracteres longo, e pode ser separado no script usando a função 'sublin'.
Um erro do GrADS resultando de um comando inválido NÃO terminará execução do script.
108
Qualquer comando do GrADS pode ser editado no ambiente de script, incluindo o comando run. O
conjunto de caracteres de resultado de emissão do comando run será o conjunto de caracteres passado
de retorno do script de 'nível baixo' via o comando ‘return’ naquele script— quando aquele script
retorna ao GrADS (e assim retorna ao nível mais alto do script). Pode-se recursivamente chamar
qualquer script, mas deve-se assegurar de obter retorno das recursões.
Funções Intrínsecas
Funções de String
subwrd (string, palavra) - obtém uma única palavra de um string.
O resultado é a enésima 'palavra' do string. Se o string é muito curto, o resultado é NULO. A
'palavra' deve ser um inteiro.
sublin (string, linha) - obtém uma única linha de um string contendo várias linhas
O resultado é a enésima 'linha' do string. Se o string tem muito poucas linhas, o resultado é
NULO. A 'linha' deve ser um inteiro.
substr (string, começo, comprimento) - obtém parte de um string
O subconjunto de um string começando na localização 'começo' de comprimento 'comprimento'
será retornado. Se o string é muito curto, o resultado será um string curto ou NULO. O 'começo' e
' comprimento devem ser valores inteiros.
Funções de Entrada/Saída (I/O)
read (nome de arquivo) - lê registros de um arquivo
O próximo registro do arquivo 'nome de arquivo' ; é lido. Repetidas chamadas podem ser feitas
para ler consecutivos registros. O resultado são duas linhas dentro um conjunto de caracteres. A
primeira linha é o código de retorno, a segunda linha é o registro lido. O registro pode ter um
máximo de 80 caracteres. Use a função 'sublin' para separar o resultado. Os códigos de retorno
são:
0 - ok
1 - erro de abertura
2 - fim de arquivo
8 - arquivo aberto para escrita
9 - Erro de Entrada/Saída (I/O)
Os arquivos são abertos quando a primeira chamada de leitura é feita para um nome de arquivo
particular. Os arquivos são fechados quando a execução do arquivo de escrita termina (note que os
arquivos permanecem abertos entre chamadas de função, etc.).
write (nome de arquivo, registro <,append>) - escreve registros para um arquivo de saída
O registro é escrito para o arquivo 'nome de arquivo'. Na primeira chamada para escrever para
um arquivo particular, o arquivo é aberto no modo de escrita. Este destruirá um arquivo já
existente! Se for usada o símbolo opcional append, o arquivo será aberto no modo anexar e tudo
que for escrito será anexado no fim do arquivo. Os códigos de retorno são:
0 - ok
1 - erro de abertura
8 - arquivo aberto para leitura
109
close (nome)
Fecha o especificado arquivo. Este deve ser feito se for escolhido ler um arquivo o qual foi escrito.
Isto pode também ser usado para retornar no começo de um arquivo. Os códigos de retorno são:
0 - ok
1 - arquivo não aberto
Comandos que complementam a linguagem de script
Há alguns comandos no GrADS que, embora não foram projetados exclusivamente para scripts, são
na maior parte úteis quando usados como complemento da linguagem de script. Esses incluem:
query <opção>
Emitindo o comando query sem nenhuma opção pode-se ver algumas das opções disponíveis do
mesmo. O seguinte é uma lista completa das opções query:
transforma - faz transformações de coordenadas, por exemplo
query transforma valor1 valor2
onde transforma é um destes:
xy2w
coords XY para coords globais
xy2gr
coords XY para coords de grade
w2xy
coords globais para coords XY
w2gr coords globais para coords grade
gr2w
coords de grade para coords globais
gr2xy
coords de grade para coords XY
ll2xy
coords lat/lon para coords XY
pp2xy
coords de página para coords XY
Estes queries são válidos SOMENTE APÓS alguma coisa ter sido exibida.
transformações aplicam-se SOMENTE para o mais recente item que foi exibido.
As
Coords XY estão em polegadas na página (i.e., monitor) onde a página tem 11x8.5
polegadas ou 8.5x11 polegadas, dependendo de como o GrADS foi iniciado.
Coords Globais são lat, lon, lev, tempo ou val, dependendo do ambiente de dimensão que
está atuando quando a grade foi exibida. Nota-se que o tempo é exibido (e deve ser
especificado) no formato absoluto de data/tempo do GrADS. val é o valor da coordena para
uma plotagem 1-D (gráfico de linha).
Coordena de Grade são as coordenadas com respeito à grade sendo exibida. Para conjuntos
de dados de estação, a grade e coordenas globais são equivalentes exceto na dimensão do
tempo. Se for exibido uma grade de um 'envolvido' conjunto de dados, os números da grade
podem estar fora do limite dos números de grade de arquivos atuais. (Um 'envolvido'
conjunto de dados é um conjunto de dados que cobre a terra na direção da longitude.
Envolvimento toma lugar automaticamente). As conversões são feitas consistentemente,
mas para certificar que trata-se de caso de envolvimento se seu conjunto de dados é global.
Exemplo:
Você tem exibido um diagrama de Hovmoller:
query xy2w 5.0 4.5
A resposta poderá ser:
110
Lon = -95 Tempo = 00z5nov1992
define
defval
- lista as atuais variáveis definidas
- dá o valor de uma variável definida em um ponto.
Por exemplo, query defval p 1 1 dará o valor da variável definida p no ponto 1,1. Para
interativamente modificar os valores de ponto grade em uma grade definida, q defval
pode ser usado em conjunto com o set defval, por exemplo:
define p=pr
q defval p 1 1
retornará para o terminal (e para a variável de script result)
defval is 100
quando 100 é o valor da grade definida p no ponto 1,1.
Para mudar o valor da grade definida p no ponto 1,1:
set defval p 1 1 65
muda o valor da variável definida p no ponto 1,1 para 65.
dims
- dá o atual ambiente dimensionado
file n
- dá informação do arquivo de número n
files
- lista os arquivos abertos
fwrite
- dá o nome do arquivo usado para operações do fwrite
gxinfo
- lista atribuições de gráficos
q gxinfo é útil quando tentando encontrar a área gráfica, por exemplo:
ga-> q gxinfo
poderá dar:
Last Graphic = Line
Page Size = 11 by 8.5
X Limits = 2 to 10.5
Y Limits = 0.75 to 7.75
Xaxis = Lon Yaxis = Val
Mproj = 2
onde:
Last Graphic = Line
Page Size = 11 por 8.5
X Limits = 2 para 10.5
polegadas
Y Limits = 0.75 para 7.75
polegadas
Xaxis = Lon Yaxis = Val
Mproj = número
abaixo.
um gráfico de linha foi plotado
modo de paisagem (padrão)
o desenho está limitado na página entre o x=2 e 10.5
o desenho está limitado entre o y=0.75 e 7.75
tipo de dado plotado em cada eixo
mproj é a projeção do mapa os dados estão exibidos
onde: número é
1 – scaled (nenhuma preservação de razão de aspecto)
111
2 -latlon (2-D campos horiz, lon/lat)
3 -nps (estéreo polar norte)
4 -sps (estéreo polar sul)
5 -Robinson
NOTA: a projeção Robinson trabalha somente quando:
'set lon -180 180'
'set lat -90 90'
pos -
- espera pelo clique do mouse e retorna a posição do cursor do mouse.
shades
- dá as cores e os níveis de contornos sombreados
string xxx - - retorna a largura do conjunto de caracteres xxxx.
time -
- dá o limite de tempo do atual arquivo aberto
udft
- lista a tabela da função definida pelo usuário
set gxout findstn
Este tipo de saída de gráficos espera três argumentos via um comando display. O primeiro
argumento é um argumento de dado de estação. O 2o. e 3o. argumentos são a posição X e Y na
tela da desejada coordenadas de pesquisa. O GrADS irá pesquisar pela mais próxima estação para
a especificada posição X e Y, e imprimir o stid, lon, e lat da estação encontrada. Isto deverá ser
somente usado quando X e Y são as dimensões variantes e APÓS um comando regular de exibição
(que resulta em saída gráfica) ser usado.
Este comando é primeiramente pretendido para uso em script. Este comando é fornecido como
uma facilidade interina para fazer esta operação; uma mais completa facilidade será fornecida para
fazer uma variedade de operações de filtro e pesquisa. Assim, deve-se isolar o uso do comando em
seus scripts caso seja necessário trocá-los mais tarde.
set dbuff on|off
Atribui o modo de buffer duplo em on ou off. Isto permite que a animação seja controlada de um
script. O comando clear também atribui o modo de buffer duplo para off.
swap
Troca buffers, quando o modo de buffer duplo está on. Se o modo de buffer duplo está off, este
comando não tem efeito.
O modo usual destes comandos seria:
set dbuff on
loop
display something
swap
endloop
set dbuff off
Widgets
O GrADS contem dois tipos de interface gráfica widgets (GUI) o qual pode ser usado para
implementar uma interface " ponto e clique" usando a linguagem do script.
112
Botões na tela
Aqui está um script de botão ilustrando como desenhar um botão widget na tela
*
*-------------------------- dbutton -----------------*
set rgb 90 100 100 100
set rgb 91 50 50 50
set rgb 92 200 200 200
function dbutton(bnum,xc,yc,dx,dy,string,oncol,offcol,facecol)
set button 'oncol' 'facecol' 91 92 'offcol' '_bgcol' 91 92 6
draw button 'bnum' 'xc' 'yc' 'dx' 'dy' 'string
return
onde:
para set button....
oncol
facecol
offcol
91 92
_bgcol
6
cor do texto quando no estado “ligado”(1)
cor da face do botão no estado "ligado"
cor do texto quando no estado "desligado"(0)
cor do delineando do botão para aparência de 3-D
cor da face do botão no estado "desligado"
espessura do delineamento de sombra
para draw button ...
bnum
xc
yc
dx
dy
string
número do botão (1-512)
x central do botão em coordena de página (polegadas)
y central do botão em coordena de página (polegadas)
comprimento (x) do botão em polegadas
altura (y) do botão em polegadas
conjunto de caracteres para exibir no centro do botão em (xc,yc)
Pode-se também redesenhar um botão:
redraw button ### 0|1 onde:
### é o número do botão para o draw button ### ..., e 0 ou 1 é o "estado"
Rubber Banding
O GrADS tem um tipo de widget chamado "rband" para rubber banding. Há dois modos: 1) box; e 2)
line
No modo box, quando o usuário clica e arrasta, um quadrado é aberto e no modo line uma linha é
obtida.
Para montar o rband,
set rband nn modo x1 y1 x2 y2 onde:
nn
modo
x1
y1
x2
- widget #
= box ou line
- o ponto mais baixo em x nas unidades de página onde o widget estará ativo
- o ponto mais baixo em y nas unidades de página onde o widget estará ativo
- o ponto mais alto em x nas unidades de página onde o widget estará ativo
113
y2
- o ponto mais alto em y nas unidades de página onde o widget estará ativo
Por exemplo, após o comando q gxinfo deseja-se montar um widget ruber band de box na região da
plotagem somente,
Last Graphic = Line
Page Size = 11 by 8.5
X Limits = 2 to 10.5
Y Limits = 0.75 to 7.75
Xaxis = Lon Yaxis = Val
Mproj = 2
Primeiro,
set rband 21 box 2 0.75 10.5 7.75
e então para ativar o widget,
ga-> q pos
o qual congela o sistema até o usuário clicar sobre a tela gráfica. Após pressionar e arrastar, este tipo
de resposta será obtida GrADS:
Positions = 2.13125 7.565 1 2 7.08125 2.19583 onde:
2.13
- x do primeiro canto do quadrado (x1)
7.56
- y do primeiro canto do quadrado (y1)
1
- qual botão foi pressionado:
1 - esquerda
2 - médio
3 - direita
2
- tipo de widget (rband):
1 - botão
2 - rband
7.8
- x do segundo canto do quadrado (x2)
7.56
- y do segundo canto do quadrado (y2)
A coordena de página pode ser então analisada gramaticalmente e usada em
'q xy2w'
para recuperar os pontos de lat/lon...
Exemplos
Alguns simples scripts de exemplo são fornecidos com a distribuição do GrADS. Estes podem ser
conseguidos via ftp (anonymous) no endereço grads.iges.org no diretório /grads. Neste endereço um
número bem grande de scripts estará sempre disponível. Desde scripts menores e mais simples até
maiores e mais complicados.
cbar.gs
xyplot.gs
string.gs
draw.gs
Desenhe uma barras de cores após uma plotagem em shaded ser exibida
Faz uma plotagem geral em XY.
Desenha um conjunto de caracteres na posição do clique do mouse na tela.
Desenha uma linha via o clique do mouse na tela.
114
24.0 Usando Projeções de Mapa no GrADS
É importante compreender a distinção entre os dois usos de projeções de mapa quando criando
exibição de seus dados no GrADS:
• projeção dos dados ( grades preprojetadas);
• projeção de exibição
O GrADS suporta dois tipos de dados em grades:
• grades lat/lon (e não necessariamente regulares, i.e., gaussiana);
• grades preprojetadas.
Usando Grades Preprojetadas
Os dados preprojetados são dados já em uma projeção de mapa. O GrADS suporta quatro tipos de
dados preprojetados:
1. N polar estéreo (projeção do modelo do NMC);
2. S polar estéreo (projeção do modelo do NMC) ;
3. Lambert Conformal (originalmente para o modelo NORAPS da Marinha);
4. Modelo do NMC eta (não balanceado).
5. Mais preciso N e S polar estéreo (dados de alta resolução SSM/I)
6. Modelo do RAMS da Universidade Estadual do Colorado (polar estéreo oblíquo; beta)
Quando grades preprojetadas são abertas no GrADS, constantes de interpolação bilinear são
calculadas e todos os dados são exibidas em uma grade interna lat/lon do GrADS definida pelo cartão
xdef e do ydef no descritor de dados ou arquivo ".ctl" (que é porque isto toma longo tempo para
"abrir" um conjunto de dados de grade preprojetada).
É muito importante apontar que a grade interna do GrADS pode ser qualquer grade como isto está
completamente independente da grade dos dados preprojetados. Assim, não há nada que impeça
exibir dados preprojetados em uma resolução muito alta de grade lon/lat (outra vez, definida no .ctl
por xdef e ydef). De fato, pode-se criar e abrir múltiplos arquivos .ctl com diferentes resoluções e/ou
regiões que apontam para o mesmo arquivo de dados preprojetados.
Quando é feito um "display" (i.e., obter uma grade de dados), os dados preprojetados são bilinearmente interpolados para a grade interna lat/lon do GrADS. Para campos escalares
preprojetados (i.e., geopotencial em 500 mb), a exibição é adequada e a exatidão da interpolação
pode ser controlada pelo xdef e ydef para definir uma grade de resolução espacial mais alta.
A grande virtude desta aproximação é que toda a construção de funções analíticas do GrADS (i.e.,
aave, hcurl...) continua a trabalhar até mesmo quando os dados não estiveram originalmente em grade
lon/lat. O ponto é que não está se olhando diretamente em seus dados em um mapa geográfico.
Entretanto, poderia sempre definir-se um arquivo .ctl que simplesmente abrisse os arquivos de dados
como dados i,j e os exibisse sem o mapa (set mpdraw off). Assim, em minha opinião, este
compromisso não é o que está limitando até mesmo olhar na grade — somente não se obtém o
background do mapa.
Campos Preprojetados de vetor são uns pequenos malandros, dependendo de se o vetor é definido
relativo à grade de dados ou relativo a Terra. Por exemplo, grades do NMC polar estéreo usam
ventos relativos à grade de dados e assim deve ser girada para a grade interna lat/lon do GrADS
(outra vez definida no arquivo .ctl pelos cartões xdef e ydef).
115
O único potencial problema em trabalhar com dados preprojetados (i.e., modelo de dados Lambert
Conformal) é definir a projeção para o GrADS. Isto é efetuado usando um cartão pdef no arquivo
descritor de dados ".ctl".
Dados de Preprojeção Polar Estéreo (grossa precisão para Modelos do NMC)
Os dados preprojetados em uma projeção polar estéreo (N e S) estão definidos como no NMC. Para
os dados GRIB do modelo NMC NGM distribuídos via ftp no anonymous nic.fb4.noaa.gov, o cartão
do pdef é:
pdef isize jsize projtype ipole jpole lonref gridinc
pdef 53 45 nps 27 49 -105 190.5
(NOTA: o * na primeira coluna do arquivo .ctl significa um comentário...)
onde,
ipole e jpole são o (i,j) do pólo e gridinc é o dx em km.
A relevante fonte do GrADS é:
void w3fb04 (float alat, float along, float xmeshl, float orient,
float *xi, float *xj) {
/*
C
C SUBPROGRAM: W3FB04
LATITUDE, LONGITUDE TO GRID COORDINATES
C
AUTHOR: MCDONELL,J.
ORG: W345
DATE: 90-06-04
C
C ABSTRACT: CONVERTS THE COORDINATES OF A LOCATION ON EARTH FROM THE
C
NATURAL COORDINATE SYSTEM OF LATITUDE/LONGITUDE TO THE GRID (I,J)
C
COORDINATE SYSTEM OVERLAID ON A POLAR STEREOGRAPHIC MAP PROC
JECTION TRUE AT 60 DEGREES N OR S LATITUDE. W3FB04 IS THE REVERSE
C
OF W3FB05.
C
C PROGRAM HISTORY LOG:
C
77-05-01 J. MCDONELL
C
89-01-10 R.E.JONES
CONVERT TO MICROSOFT FORTRAN 4.1
C
90-06-04 R.E.JONES
CONVERT TO SUN FORTRAN 1.3
C
93-01-26 B. Doty
converted to C
C
C USAGE: CALL W3FB04 (ALAT, ALONG, XMESHL, ORIENT, XI, XJ)
C
C
INPUT VARIABLES:
C
NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES
C
------ --------- ----------------------------------------------C
ALAT
ARG LIST LATITUDE IN DEGREES (<0 IF SH)
C
ALONG ARG LIST WEST LONGITUDE IN DEGREES
C
XMESHL ARG LIST MESH LENGTH OF GRID IN KM AT 60 DEG LAT(<0 IF SH)
C
(190.5 LFM GRID, 381.0 NH PE GRID,-381.0 SH PE GRID)
C
ORIENT ARG LIST ORIENTATION WEST LONGITUDE OF THE GRID
C
(105.0 LFM GRID, 80.0 NH PE GRID, 260.0 SH PE GRID)
C
C
OUTPUT VARIABLES:
C
NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES
C
------ --------- ----------------------------------------------C
XI
ARG LIST I OF THE POINT RELATIVE TO NORTH OR SOUTH POLE
C
XJ
ARG LIST J OF THE POINT RELATIVE TO NORTH OR SOUTH POLE
C
C
SUBPROGRAMS CALLED:
C
NAMES
LIBRARY
C
------------------------------------------------------- -------C
COS SIN
SYSLIB
C
116
C
REMARKS: ALL PARAMETERS IN THE CALLING STATEMENT MUST BE
C
REAL. THE RANGE OF ALLOWABLE LATITUDES IS FROM A POLE TO
C
30 DEGREES INTO THE OPPOSITE HEMISPHERE.
C
THE GRID USED IN THIS SUBROUTINE HAS ITS ORIGIN (I=0,J=0)
C
AT THE POLE IN EITHER HEMISPHERE, SO IF THE USER'S GRID HAS ITS
C
ORIGIN AT A POINT OTHER THAN THE POLE, A TRANSLATION IS NEEDED
C
TO GET I AND J. THE GRIDLINES OF I=CONSTANT ARE PARALLEL TO A
C
LONGITUDE DESIGNATED BY THE USER. THE EARTH'S RADIUS IS TAKEN
C
TO BE 6371.2 KM.
C
C ATTRIBUTES:
C
LANGUAGE: SUN FORTRAN 1.4
C
MACHINE: SUN SPARCSTATION 1+
C*/
static float radpd = 0.01745329;
static float earthr = 6371.2;
float re,xlat,wlong,r;
re
= (earthr * 1.86603) / xmeshl;
xlat = alat * radpd;
if (xmeshl>0.0) {
wlong = (along + 180.0 - orient) * radpd;
r
= (re * cos(xlat)) / (1.0 + sin(xlat));
*xi
= r * sin(wlong);
*xj
= r * cos(wlong);
}
} else {
re
=
xlat =
wlong =
r
*xi
*xj
}
-re;
-xlat;
(along - orient) * radpd;
= (re * cos(xlat)) / (1.0+ sin(xlat));
= r * sin(wlong);
= -r * cos(wlong);
Dados na Projeção Lambert Conformal
A projeção Lambert Conformal (lcc) foi implementado para o modelo de área limitado NORAPS da
Marinha Americana. Assim, para trabalhar com os dados do lcc deve-se expressar a grade no
contexto do lcc da grade da Marinha. O NMC foi capaz de fazer isto para suas grades do AIWIPS e a
definição da Marinha deverá ser geral o suficiente para outros.
Uma típica grade Lambert-conformal do NORAPS está descrita abaixo, incluindo o código em C que
monta a interpolação interna.
117
O arquivo .ctl é:
dset ^temp.grd
title DADOS DE TESTE NORAPS
undef 1e20
pdef 103 69 lcc 30 -88 51.5 34.5 20 40 -88 90000 90000
xdef 180 linear -180 1.0
ydef 100 linear -10 1.0
zdef 16 levels 1000 925 850 700 500 400 300 250 200 150 100 70 50 30 20 10
tdef 1 linear 00z1jan94 12hr
vars 1
t 16 0 temp
endvars
onde,
103 = #pts no x
69 = #pts no y
lcc = Lambert-conformal
30 = lat de um ponto de ref
88 = lon de ponto de ref (Leste é positivo no GrADS, Oeste é negativo)
51.5 = i de ponto de ref
34.5 = j de ponto de ref
20 = lat verdadeira S
40 = lat verdadeira N
88 = lon padrão
90000 = dx em M
90000 = dy em M
De outro modo, é o mesmo como outros arquivos do GrADS.
Nota - o xdef/ydef aplica para a grade lon/lat interpola internamente para o GrADS e pode ser algo...
O fonte do GrADS o qual projeta lon/lat de grade interna lon/lat do GrADS para i,j da grade
preprojetada é:
/* Lambert Conformal conversion */
void ll2lc (float *vals, float grdlat, float grdlon,
float *grdi, float *grdj) {
/* Subroutine to convert from lat-lon to Lambert Conformal i,j.
Provided by NRL Monterey; converted to C 6/15/94.
c
SUBROUTINE: ll2lc
c
c
PURPOSE: To compute i- and j-coordinates of a specified
c
grid given the latitude and longitude points.
c
All latitudes in this routine start
c
with -90.0 at the south pole and increase
c
northward to +90.0 at the north pole. The
c
longitudes start with 0.0 at the Greenwich
c
meridian and increase to the east, so that
c
90.0 refers to 90.0E, 180.0 is the interc
national dateline and 270.0 is 90.0W.
c
c
INPUT VARIABLES:
c
c vals+0
reflat: latitude at reference point (iref,jref)
c
c vals+1
reflon: longitude at reference point (iref,jref)
118
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
*/
vals+2
iref:
i-coordinate value of reference point
vals+3
jref:
j-coordinate value of reference point
vals+4
stdlt1: standard latitude of grid
vals+5
stdlt2: second standard latitude of grid (only required
if igrid = 2, lambert conformal)
vals+6
stdlon: standard longitude of grid (longitude that
points to the north)
vals+7
delx:
grid spacing of grid in x-direction
for igrid = 1,2,3 or 4, delx must be in meters
for igrid = 5, delx must be in degrees
vals+8
dely:
grid spacing (in meters) of grid in y-direction
for igrid = 1,2,3 or 4, delx must be in meters
for igrid = 5, dely must be in degrees
grdlat: latitude of point (grdi,grdj)
grdlon: longitude of point (grdi,grdj)
grdi:
i-coordinate(s) that this routine will generate
information for
grdj:
j-coordinate(s) that this routine will generate
information for
float pi, pi2, pi4, d2r, r2d, radius, omega4;
float gcon,ogcon,ahem,deg,cn1,cn2,cn3,cn4,rih,xih,yih,rrih,check;
float alnfix,alon,x,y;
pi = 4.0*atan(1.0);
pi2 = pi/2.0;
pi4 = pi/4.0;
d2r = pi/180.0;
r2d = 180.0/pi;
radius = 6371229.0;
omega4 = 4.0*pi/86400.0;
/*mf -------------- mf*/
/*case where standard lats are the same */
if(*(vals+4) == *(vals+5)) {
gcon = sin(*(vals+4)*d2r);
} else {
gcon = (log(sin((90.0-*(vals+4))*d2r))
log(sin((90.0-*(vals+5))*d2r)))
/(log(tan((90.0-*(vals+4))*0.5*d2r))
log(tan((90.0-*(vals+5))*0.5*d2r)));
}
/*mf -------------- mf*/
ogcon = 1.0/gcon;
ahem = fabs(*(vals+4))/(*(vals+4));
deg = (90.0-fabs(*(vals+4)))*d2r;
cn1 = sin(deg);
cn2 = radius*cn1*ogcon;
119
}
deg = deg*0.5;
cn3 = tan(deg);
deg = (90.0-fabs(*vals))*0.5*d2r;
cn4 = tan(deg);
rih = cn2*pow((cn4/cn3),gcon);
deg = (*(vals+1)-*(vals+6))*d2r*gcon;
xih = rih*sin(deg);
yih = -rih*cos(deg)*ahem;
deg = (90.0-grdlat*ahem)*0.5*d2r;
cn4 = tan(deg);
rrih = cn2*pow((cn4/cn3),gcon);
check = 180.0-*(vals+6);
alnfix = *(vals+6)+check;
alon = grdlon+check;
while (alon<0.0) alon = alon+360.0;
while (alon>360.0) alon = alon-360.0;
deg = (alon-alnfix)*gcon*d2r;
x = rrih*sin(deg);
y = -rrih*cos(deg)*ahem;
*grdi = *(vals+2)+(x-xih)/(*(vals+7));
*grdj = *(vals+3)+(y-yih)/(*(vals+8));
Modelo do NMC Eta ( grades não balanceadas)
A grade "nativa" do modelo eta do NMC é desajeitada para trabalhar com ela porque as variáveis
estão sobre balanceamento (i.e., a grade para ventos não é a mesma como a grade para pontos de
massa) e grades não retangulares (o número de pontos em i não é constante com j). Porque qualquer
contorno de dados em grade irregular envolve interpolação em algum ponto, NMC cria campos do
modelo eta "não balanceado" para programas de aplicação prática tais como o GrADS. Nas grades
não balanceado todas as variáveis são colocadas em uma grade comum e retangular (os pontos de
massa).
A rotação do vento também foi adicionado de modo que os dados de vetor serão propriamente
exibidos.
O cartão do pdef para uma típica grade do modela eta é:
pdef 181 136 eta.u -97.0 41.0 0.38888888 0.37037037
181
136
eta.u
-97.0
41.0
0.3888
0.3703
= #pts no x
= #pts no y
= grade do eta, não balanceado
= lon de ponto do ref (E é positivo no GrADS, W é negativa) [deg]
= lat de ponto do ref [deg]
= dlon [deg]
= dlat [deg]
O código fonte no GrADS para o mapeamento de lon,lat para i,j é:
void ll2eg (int im, int jm, float *vals, float grdlon, float grdlat,
float *grdi, float *grdj, float *alpha) {
/*
Subroutine to convert from lat-lon to NMC eta i,j.
Provided by Eric Rogers NMC; converted to C 3/29/95 by Mike Fiorino.
c
c
c
SUBROUTINE: ll2eg
PURPOSE: To compute i- and j-coordinates of a specified
120
c
grid given the latitude and longitude points.
c
All latitudes in this routine start
c
with -90.0 at the south pole and increase
c
northward to +90.0 at the north pole. The
c
longitudes start with 0.0 at the Greenwich
c
meridian and increase to the east, so that
c
90.0 refers to 90.0E, 180.0 is the interc
national dateline and 270.0 is 90.0W.
c
c
INPUT VARIABLES:
c
c vals+0
tlm0d: longitude of the reference center point
c
c vals+1
tph0d: latitude of the reference center point
c
c vals+2
dlam: dlon grid increment in deg
c
c vals+3
dphi: dlat grid increment in deg
c
c
c
grdlat: latitude of point (grdi,grdj)
c
c
grdlon: longitude of point (grdi,grdj)
c
c
grdi:
i-coordinate(s) that this routine will generate
c
information for
c
c
grdj:
j-coordinate(s) that this routine will generate
c
information for
c
*/
float pi,d2r,r2d, earthr;
float tlm0d,tph0d,dlam,dphi;
float
phi,lam,lame,lam0,phi0,lam0e,cosphi,sinphi,sinphi0,cosphi0,sinlamr,cos
lamr;
float x1,x,y,z,bigphi,biglam,cc,num,den,tlm,tph;
int idim,jdim;
pi=3.141592654;
d2r=pi/180.0;
r2d=1.0/d2r;
earthr=6371.2;
tlm0d=-*(vals+0); /* convert + W to + E, the grads standard for
longitude */
tph0d=*(vals+1);
dlam=(*(vals+2))*0.5;
dphi=(*(vals+3))*0.5;
/* grid point and center of eta grid trig */
/* convert to radians */
phi
= grdlat*d2r;
lam
= -grdlon*d2r; /* convert + W to + E, the grads standard for
longitude */
lame
= (grdlon)*d2r;
phi0
= tph0d*d2r;
lam0
= tlm0d*d2r;
lam0e = ( 360.0 + *(vals+0) )*d2r;
121
/* cos and sin */
cosphi = cos(phi);
sinphi = sin(phi);
sinphi0 = sin(phi0);
cosphi0 = cos(phi0);
sinlamr=sin(lame-lam0e);
coslamr=cos(lame-lam0e);
x1
x
y
z
=
=
=
=
cosphi*cos(lam-lam0);
cosphi0*x1+sinphi0*sinphi;
-cosphi*sin(lam-lam0);
-sinphi0*x1+cosphi0*sinphi;
/* params for wind rotation alpha */
cc=cosphi*coslamr;
num=cosphi*sinlamr;
den=cosphi0*cc+sinphi0*sinphi;
tlm=atan2(num,den);
/* parms for lat/lon -> i,j */
bigphi = atan(z/(sqrt(x*x+y*y)))*r2d;
biglam = atan(y/x)*r2d;
idim = im*2-1;
jdim = jm*2-1 ;
*grdi
*grdj
*grdi
*grdj
=
=
=
=
(biglam/dlam)+(idim+1)*0.5;
(bigphi/dphi)+(jdim+1)*0.5;
(*grdi+1)*0.5-1;
(*grdj+1)*0.5-1;
*alpha = asin( ( sinphi0*sin(tlm)) / cosphi ) ;
/*
printf("qqq %6.2f %6.2f %6.2f %6.2f %g %g %g %g\n",
grdlon,grdlat,*grdi,*grdj,*alpha,tlm*r2d,cosphi,sinphi0);
*/
}
Polar estéreo de alta resolução para dados do SSM/I
A projeção polar estéreo usada pelos modelos originais do NMC não é muito precisa porque ela
assume que a terra é redonda (excentricidade = 0). Enquanto esta aproximação era razoável para
modelos do NWP de grossa resolução, é inadequado para trabalhar com dados de alta resolução tal
como SSM/I.
A Rotação do vento não foi implementada!!! Use unicamente para campos escalares.
pdef ni nj pse slat slon polei polej dx dy sgn
ni
nj
slat
slon
pse
= # pontos no x
= # pontos no y
= valor absoluto da latitude padrão
= valor absoluto da longitude padrão
= polar estéreo, "excêntrico"
122
polei
= índice da posição x do pólo (onde (0,0) é o índice do primeiro ponto em vez do mais
típico (1,1) )
polej
= índice da posição y do pólo (onde (0,0) é o índice do primeiro ponto em vez do mais
típico (1,1) )
dx
= delta x em km
dy
= delta y em km
sgn
= 1 para polar estéreo N e -1 para polar estéreo S
O código fonte no GrADS para o mapeamento de lon,lat para i,j:
void ll2pse (int im, int jm, float *vals, float lon, float lat,
float *grdi, float *grdj) {
/* Convert from geodetic latitude and longitude to polar stereographic
grid coordinates. Follows mapll by V. J. Troisi.
*/
/* Conventions include that slat and lat must be absolute values */
/* The hemispheres are controlled by the sgn parameter */
/* Bob Grumbine 15 April 1994. */
const rearth = 6738.273e3;
const eccen2 = 0.006693883;
const float pi = 3.141592654;
float cdr, alat, along, e, e2;
float t, x, y, rho, sl, tc, mc;
float slat,slon,xorig,yorig,sgn,polei,polej,dx,dy;
slat=*(vals+0);
slon=*(vals+1);
polei=*(vals+2);
polej=*(vals+3);
dx=*(vals+4)*1000;
dy=*(vals+5)*1000;
sgn=*(vals+6);
xorig = -polei*dx;
yorig = -polej*dy;
/*printf("ppp %g %g %g %g %g %g
%g\n",slat,slon,polei,polej,dx,dy,sgn);*/
cdr
= 180./pi;
alat = lat/cdr;
along = lon/cdr;
e2 = eccen2;
e = sqrt(eccen2);
if ( fabs(lat) > 90.) {
*grdi = -1;
*grdj = -1;
return;
}
else {
t = tan(pi/4. - alat/2.) /
pow( (1.-e*sin(alat))/(1.+e*sin(alat)) , e/2.);
if ( fabs(90. - slat) < 1.E-3) {
rho = 2.*rearth*t/
pow( pow(1.+e,1.+e) * pow(1.-e,1.-e) , e/2.);
123
}
else {
sl = slat/cdr;
tc = tan(pi/4.-sl/2.) /
pow( (1.-e*sin(sl))/(1.+e*sin(sl)), (e/2.) );
mc = cos(sl)/ sqrt(1.-e2*sin(sl)*sin(sl) );
rho = rearth * mc*t/tc;
}
x = rho*sgn*cos(sgn*(along+slon/cdr));
y = rho*sgn*sin(sgn*(along+slon/cdr));
*grdi = (x - xorig)/dx+1;
*grdj = (y - yorig)/dy+1;
/*printf("ppp (%g %g) (%g %g %g) %g
%g\n",lat,lon,x,y,rho,*grdi,*grdj);*/
}
return;
}
Grades Polar Estéreo Oblíquas do RAMS do CSU
O modelo do RAMS do CSU usa uma projeção polar estéreo oblíqua. Esta projeção está sendo ainda
testada...
pdef 26 16 ops 40.0 -100.0 90000.0 90000.0 14.0 9.0 180000.0 180000.0
26
16
ops
40.0
-100.0
90000
90000
14.0
9.0
180000
180000
= # pts em x
= # pts em y
= polar estéreo oblíqua
= lat do ponto de ref (14.0, 9.0)
= lon do ponto de ref (14.0, 9.0 (L é positivo no GrADS, O é negativo)
= offset do xref [m]
= offset do yref [m]
= i do ponto de ref
= j do ponto de ref
= dx [m]
= dy [m]
Rotação de Vento não foi implementada!!! Usado somente para campos escalares.
O código fonte no GrADS para o mapeamento de lon,lat para i,j é:
void ll2ops(float *vals, float lni, float lti, float *grdi, float *grdj)
{
const float radius = 6371229.0 ;
const float pi = 3.141592654;
float stdlat, stdlon, xref, yref, xiref, yjref, delx , dely;
float plt,pln;
double pi180,c1,c2,c3,c4,c5,c6,arg2a,bb,plt1,alpha,
pln1,plt90,argu1,argu2;
double hsign,glor,rstdlon,glolim,facpla,x,y;
124
stdlat = *(vals+0);
stdlon = *(vals+1);
xref = *(vals+2);
yref = *(vals+3);
xiref = *(vals+4);
yjref = *(vals+5);
delx = *(vals+6);
dely = *(vals+7);
c1=1.0 ;
pi180 = asin(c1)/90.0;
/*
c
c
set flag for n/s hemisphere and convert longitude to <0 ; 360>
interval
c
*/
if(stdlat >= 0.0) {
hsign= 1.0 ;
} else {
hsign=-1.0 ;
}
/*
c
c
set flag for n/s hemisphere and convert longitude to <0 ; 360>
interval
c
*/
glor=lni ;
if(glor <= 0.0) glor=360.0+glor ;
rstdlon=stdlon;
if(rstdlon < 0.0) rstdlon=360.0+stdlon;
/*
c
c
test for a n/s pole case
c
*/
if(stdlat == 90.0) {
plt=lti ;
pln=fmod(glor+270.0,360.0) ;
goto l2000;
}
if(stdlat == -90.0) {
plt=-lti ;
pln=fmod(glor+270.0,360.0) ;
goto l2000;
}
/*
c
c
test for longitude on 'greenwich or date line'
c
*/
if(glor == rstdlon) {
if(lti > stdlat) {
plt=90.0-lti+stdlat;
125
}
pln=90.0;
} else {
plt=90.0-stdlat+lti;
pln=270.0;;
}
goto l2000;
if(fmod(glor+180.0,360.0) == rstdlon) {
plt=stdlat-90.0+lti;
if(plt < -90.0) {
plt=-180.0-plt;
pln=270.0;
} else {
pln= 90.0;
}
goto l2000 ;
}
/*
c
c
determine longitude distance relative to rstdlon so it belongs to
c
the absolute interval 0 - 180
c
*/
argu1 = glor-rstdlon;
if(argu1 > 180.0) argu1 = argu1-360.0;
if(argu1 < -180.0) argu1 = argu1+360.0;
/*
c
c
c
*/
1. get the help circle bb and angle alpha (legalize arguments)
c2=lti*pi180 ;
c3=argu1*pi180 ;
arg2a = cos(c2)*cos(c3) ;
if( -c1 > arg2a ) arg2a = -c1 ; /* arg2a = max1(arg2a,-c1) */
if( c1 < arg2a ) arg2a = c1 ; /* min1(arg2a, c1)
*/
bb = acos(arg2a) ;
c4=hsign*lti*pi180 ;
arg2a = sin(c4)/sin(bb) ;
if( -c1 > arg2a ) arg2a = -c1 ; /* arg2a = dmax1(arg2a,-c1) */
if( c1 < arg2a ) arg2a = c1 ; /* arg2a = dmin1(arg2a, c1) */
alpha = asin(arg2a) ;
/*
c
c
2. get plt and pln (still legalizing arguments)
c
*/
c5=stdlat*pi180 ;
c6=hsign*stdlat*pi180 ;
arg2a = cos(c5)*cos(bb) + sin(c6)*sin(c4) ;
if( -c1 > arg2a ) arg2a = -c1 ; /* arg2a = dmax1(arg2a,-c1) */
if( c1 < arg2a ) arg2a = c1 ; /* arg2a = dmin1(arg2a, c1) */
plt1
= asin(arg2a) ;
arg2a = sin(bb)*cos(alpha)/cos(plt1) ;
if( -c1 > arg2a ) arg2a = -c1 ; /* arg2a = dmax1(arg2a,-c1) */
126
if( c1 < arg2a ) arg2a =
pln1
= asin(arg2a) ;
/*
c
c
test
c
c
*/
arg2a =
if( -c1
if( c1
plt90 =
/*
c
c
c
*/
arg2a =
if( -c1
if( c1
bb
=
arg2a =
if( -c1
if( c1
alpha =
c1 ; /* arg2a = dmin1(arg2a, c1) */
for passage of the 90 degree longitude (duallity in pln)
get plt for which pln=90 when lti is the latitude
sin(c4)/sin(c6) ;
> arg2a ) arg2a = -c1 ; /* arg2a = dmax1(arg2a,-c1) */
< arg2a ) arg2a = c1 ; /* arg2a = dmin1(arg2a, c1) */
asin(arg2a) ;
get help arc bb and angle alpha
cos(c5)*sin(plt90) ;
> arg2a ) arg2a = -c1 ; /* arg2a = dmax1(arg2a,-c1) */
< arg2a ) arg2a = c1 ; /* arg2a = dmin1(arg2a, c1) */
acos(arg2a) ;
sin(c4)/sin(bb) ;
> arg2a ) arg2a = -c1 ; /* arg2a = dmax1(arg2a,-c1) */
< arg2a ) arg2a = c1 ; /* arg2a = dmin1(arg2a, c1) */
asin(arg2a) ;
/*
c
c
get glolim - it is nesc. to test for the existence of solution
c
*/
argu2 = cos(c2)*cos(bb) / (1.-sin(c4)*sin(bb)*sin(alpha)) ;
if( fabs(argu2) > c1 ) {
glolim = 999.0;
} else {
glolim = acos(argu2)/pi180;
}
/*
c
c
modify (if nesc.) the pln solution
c
*/
if( ( fabs(argu1) > glolim && lti <= stdlat ) || ( lti > stdlat ) ) {
pln1 = pi180*180.0 - pln1;
}
/*
c
c
the solution is symmetric so the direction must be if'ed
c
*/
if(argu1 < 0.0) {
pln1 = -pln1;
}
/*
c
convert the radians to degrees
127
c
*/
plt = plt1/pi180 ;
pln = pln1/pi180 ;
/*
c
c
to obtain a rotated value (ie so x-axis in pol.ste. points east)
c
add 270 to longitude
c
*/
pln=fmod(pln+270.0,360.0) ;
l2000:
/*
c
c
this program convert polar stereographic coordinates to x,y ditto
c
longitude:
0 - 360 ; positive to the east
c
latitude : -90 - 90 ; positive for northern hemisphere
c
it is assumed that the x-axis point towards the east and
c
corresponds to longitude = 0
c
c
tsp 20/06-89
c
c
constants and functions
c
*/
facpla = radius*2.0/(1.0+sin(plt*pi180))*cos(plt*pi180);
x = facpla*cos(pln*pi180) ;
y = facpla*sin(pln*pi180) ;
*grdi=(x-xref)/delx + xiref;
*grdj=(y-yref)/dely + yjref;
return;
}
Armadilhas quando usando dados preprojetados
Há algumas armadilhas com o uso de dados preprojetados:
1) as unidades na definição da variável para as componentes u e v devem ser 33 e 34 (o padrão GRIB)
respectivamente, i.e.,
u 15 33 componente u do vento em 15 níveis de pressão
v 15 34 componente v do vento em 15 níveis de pressão
2) a rotação do vento é tratada para dados preprojetados em polar estéreo (N e S), mas não para
Lambert Conformal, como a Marinha roda os ventos relativos a Terra. Esta será adicionada mais
tarde......
3) as projeções eta.u e ops são ainda experimentais...
Exibição de Projeções do GrADS
Agora que foi compreendido os dados em grades do GrADS, é tempo para discutir a exibição de
projeções. Os gráficos no GrADS são calculados relativamente ao espaço i,j dos dados em grade
internos do GrADS transformado para a coordenada do dispositivo de exibição (i.e., a tela) e então
128
exibidos. Que é, o i,j do elemento gráfico é convertido ao lat/lon e então ao x,y na tela via uma
projeção de mapa.
O GrADS atualmente suporta quatro projeções de exibição:
•
•
•
•
lat/lon (ou esférica);
N polar estéreo (set mproj nps);
S polar estéreo (set mproj sps);
a projeção do Robinson (set lon -180 180, set lat -90 90, set mproj robinson).
Como pode ser visto, o i,j-para-lon/lat-para-tela x,y para exibição de lon/lat é muito simples e é
consideravelmente mais complicado para as projeção polar estéreo. N e S
Em princípio, a projeção de exibição Lambert Conformal será implementado. Isto somente toma
trabalho e uma simples interface do usuário para montar aquela projeção de exibição. Realmente, a
interface do usuário (i.e., "conjunto" chamadas) é o problema mais difícil...
Resumo e Planos
O GrADS trata projeções de mapa de dois modos diferentes. O primeiro é o dado preprojetado onde
os campos já estão em uma projeção (e.g., Lambert Conformal). É sinceramente direito para
implementar outras projeções de dados preprojetados e será totalmente implementando a grade do
eta do NMC ambos balanceado e não balanceado, "finas" grades gaussianas e a projeção oblíqua
polar estéreo do RAMS do CSU. O segundo está em como gráficos i,j (calculados no espaço de
"grade") são exibidos sobre um mapa de fundo. Atualmente, umas poucas e básicas projeções
(lon/lat, polar estéreo e robinson) são suportadas, mas talvez o grupo de desenvolvimento irá manejar
este problema.
129
Apêndices
130
Apêndice A: Scripts Suplementares
Este apêndice abrange documentação (onde está disponível) e nomes de scripts disponíveis
para suplementar as utilidades do GrADS.
1) Correlação entre duas grades horizontais (corr.gs)
Autor: Mike Fiorino
2) Script de Tabela de Cores no GrADS (cmap.gs)
Autor: Mike Fiorino
Pré requisitos
Assume-se que o usuário saiba alguma coisa sobre scripts do GrADS e esperançosamente tenha
escrito alguns. No texto abaixo, os conjuntos de caracteres entre ‘ ‘ são comandos do GrADS e os
conjunto de caracteres entre " " são comandos do UNIX ou nomes de arquivo.
Usando Cores no GrADS
Vamos primeiro tratar do uso de cores. O GrADS tem 16 cores, pelo padrão, numeradas de 0 a 15 e
tem a capacidade de estender o número de cores usando
'set rgb ## R G B' onde
## é o número de cor
R é o valor Vermelho (0-255)
G é o valor Verde da cor (0-255)
B é o valor Azul da cor (0-255)
Assim, para criar um mapa de cores entre os número de cores 21-24, por exemplo,
'set rgb 20 0 155 155'
'set rgb 21 155 0 155'
'set rgb 22 0 0 155'
'set rgb 23 155 155 155'
'set rgb 24 155 0 0'
estas cores serão acessadas da mesmo forma como são acessadas as cores de 0-15 embutidas. Por
exemplo,
'set contorno do gxout'
'set ccolor 23'
'd slp'
contornará o campo de slp usando a cor 23
Se atribuir a seqüência "arco-íris" para suas novas cores,
'set rbcols 21 22 23 24'
'd slp'
contornará slp com um limite de cores de 21-24
131
Talvez a mais usada aplicação de cores definidas pelo usuário está nos gráficos de cores preenchidas.
Por exemplo,
'set gxout shaded'
'set clevs 1000 1008 1016 1024 '
'set ccols 0 21 22 23 24'
pintará áreas < 1000 no slp em preto (nenhuma cor), áreas onde slp é 1000 - 1008 em 21, ... , 1016 1024 em 23 e todos valores > que 1024 em 24.
Para grades com índice ou dados paramétricos (i.e., não contínuo), o comando do fgrid é muito útil,
'set gxout fgrid'
'set fgvals 1000 22'
‘d slp'
preencherá caixa das grades onde slp=1000 com a cor 22. Você pode estender este pelo,
'set fgvals 1000 22 1008 23 1016 24'
para colorir mais caixas de grade,
Uma alternativa para cor de contorno preenchida é a cor de caixa preenchida usando,
'set gxout grfill'
'd slp'
o qual a cor preenche as caixas da grade usando o mesmo esquema de coloração como,
'set gxout shaded'
e você pode controlar o esquema de coloração do mesmo modo. O único problema com o
'set rgb'
é que não se pode dizer que cor aparecerá na tela (ou na impressão) até testar este rodando o GrADS.
Aqui é onde o script cmap.gs entra; este permitirá a criação ou modificação interativa de uma tabela
de cor.
Usando cmap.gs
Foram criados os arquivos com a extensão .gct para distinguir as tabelas de cores do GrADS de outros
arquivos do GrADS (i.e., .gs = Scripts do GrADS) e na primeira invocação do cmap.gs, uma tabela de
cor chamada "grads.gct" é criada. Normalmente o arquivo grads.gct é renomeado para outro nome de
arquivo (i.e., nmc.gct) e então está tabela poderá ser usada em scripts subsequentes.
Para criar uma tabela de cor. Primeiro o GrADS deve ser iniciado no modo de paisagem
"grads -l"
o tamanho da janela de gráficos pode ser modificado, e na janela terminal do GrADS deverá ser
digitado,
'run cmap.gs'
A primeira coisa que o script dirá é,
"Enter the number of Colors:
Um número entre 1-100 deverá ser digitado, por exemplo,
'10'
Então deverá ser visto na tela de gráficos (Æ explica o que é o que):
132
GrADS color table for : grads.gct --> nome do arquivo da tabela de cores
(10 quadrados) --> quadrados com as cores para editar
1 2 3 4 5 6 7 8 9 10 --> número dos quadrados
1 --> número da cor sendo editada
---
---
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|0
|0
|0
---
---
---
--> controladores de R G B
--> o valor de R G B
|--------|
| Save & |
|
Quit
-->
para clicar com o mouse salvar e sair
|
|--------|
Para editar a cor #2, deve-se posicionar o cursor do mouse sobre a caixa número 2 e pressionar. O
número de cor mudará para 2 e estará pronto para editar. Deve-se pressionar somente à esquerda do
controlador para mudar o valor. A parte de baixo do controlador é de 0 e o topo é 255. Apenas toque
com cada controlador até gostar da cor e continue para outra color. Repita o "pressionar somente à
esquerda do controlador" e quando for feito tudo, o botão save and quit deverá ser acionado. Este
salvará a tabela de cor para o arquivo "grads.gct". Este irá se parecer com algo como:
1 225 174 91
2 238 214 129
3 163 233 0
4 0 0 88
5 0 201 0
6 0 213 107
7 240 192 69
8 233 144 227
9 221 192 109
10 247 0 0
Para acessar essas cores no GrADS deve ser usado a função colortab fornecida no fim do doc. Aqui
está como o arquivo de tabela de cores "grads.gct" é acessado em um script do GrADS:
'rc=colortab(grads)'
rc é um código de retorno e igual ao número de cores no arquivo de tabela de cor "grads.gct", se o
arquivo esteve lá e esteve legível. Note que o ".gct" no nome do arquivo está implícito. Ainda que os
números são referenciados de 1-10 no cmap.gs, no GrADS as cores são numeradas de 21-30. O
número iniciado da tabela de cor é arbitrário; foi escolhido 21 para que as cores definidas pelo usuário
sejam separadas das cores 0-15 padrão do GrADS o qual não pode ser mudado.
Para usar as cores pode-se tentar algo como,
'set gxout shaded'
'set clevs 1000 1004 1008 1016'
133
'set ccols 0
21
22
23
24'
Suponha, por acaso, que não ficou muito bem a tabela de cor criada. Para editar esta, deve somente ser
reprisado o cmap.gs, mas deve ser usado o nome do arquivo como um parâmetro da linha de comando
para cmap.gs, i.e.,
"grads"
'run cmap.gs. grads
A cor da tabela será lida e pode-se agora editar as cores e salvar estas. Entretanto, o cmap.gs vai
escrever sobre o arquivo, assim este arquivo devera ser copiado para outro para guardar o original.
Problemas e perguntas
As cores não saem direito em um PC rodando Xvision durante a edição, mas não quando rodando o
GrADS. O problema está no servidor X porque quando foi desenhado a cor 20 na tela e então, 'set
rgb 20' para uma cor diferente, isto muda na tela (a diferença entre a cor verdadeira e a pseudo no X).
3) Exibição de Fonte (font.gs)
Exibe um conjunto de fontes do GrADS. Todos os caracteres para a fonte correspondem ao argumento
chamado são mostrados (padrão para set font 1). Por exemplo:
run font.gs 2
exibe o conjunto de fonte 2.
4) Plota uma barra de cores (cbar.gs)
Plota uma barra de cor chave próximo ao mapa quando gxout = shaded.
5) Empilha comandos e exibem em rubor (stack.gs)
Útil para GrADS em PC. Espera para exibir até que uma seqüência de comandos tenham sido entrada
e então executa estes seqüencialmente em rubor.
6) Desenha todos os símbolos do WX (wxsym.gs)
Exibe os símbolos de tempo disponíveis.
7) (draw.gs)
Autor: Mike Fiorino
8) (string.gs)
Autor: Mike Fiorino
9) (loop.gs)
Autor: Mike Fiorino
10) (bsamp.gs)
134
Autor: Mike Fiorino
11) Script de Barra de Cor Ampliada (cbarn.gs)
Autor: Mike Fiorino
Aqui está uma nova versão do script cbar.gs. Chama-se cbarn.gs e está consideravelmente mais
poderosa que o original. Este permite escalonar e colocar a barra de cores em qualquer parte da
página e está visualmente mais simpática.
12) Calculando o Desvio Padrão (sd.gs)
Autor: Anjuli S Bamzai
Este é um exemplo de script delineando o procedimento para ser usado para escrever uma script
gerando desvios padronizados.
Recentemente foi escrito um script realmente longo que pegou uma série de dados em grade global
semanal e calculou o std dev sazonal., dados mensais deveriam estar ao longo das mesmas linhas...
calcule séries de clima e tempo de anomalias da série primeiro.
Vamos assumir calcular o std dev de slp para Jan. Aqui é usado a notação slpanom para a série de
tempo de anomalias de slp que será gerado primeiro. sd.gs dará a soma dos quadrados das anomalias
após o do loop. nJan é o número de Janeiros que ocorreram na serie de tempo inteira. sdJan para o
std dev de slp para Jan.. é o resultado final
O truque básico é atribuir um do loop que vai acima da série inteira e usa comandos tal como no sd.gs,
13) Desenha uma Plotagem x, y (xyplot.gs)
Autor: Mike Fiorino
135
Apêndice B: Usando Dados GRIB no GrADS
Gribscan
O "gribscan" é uma rotina usada para extrair informação de grade de dados do arquivo GRIB e os
recursos:
• saída de grade em ASCII, flutuantes, e/ou grib;
• informação de produto/grade;
• automático "exame" para registros GRIB de modo que não é necessário saber o esquema
físico dos dados para encaminhar estes.
Opções de Arquivo:
i ifname
= nome do arquivo grib de entrada
o ofname
= nome do arquivo de saída SEM uma extensão
og
= saída GRIB
oa
= saída ASCII (%8g em C)
of
= uma corrente de flutuante. Isto é dependente da máquina and = 64-bit em Crays &
32-bit em qualquer outra
Se o -i não é invocado então o gribscan pede um nome de arquivo. Se -o é omitido então um padrão
ofname de zy0x1w2.type é criado onde type =
asc - ascii
grb - GRIB
dat - uma corrente de flutuante ( formato do GrADS)
O pessoal do FNMOC "obterá" o nome zy0x1w2...
Opções de Processamento:
hNNN
cabeçalho de arquivo fixo de NNN bytes. O padrão é procurar a primeira mensagem do
GRIB automaticamente, mas se NNN é conhecido, é mais eficiente especificar este.
sNNN
número max de bytes entre mensagens GRIB no arquivo, o padrão é 500 e é assumido que
deseja-se ignorar lixo (i.e., coisa comum) entre dados.
SpNNN
slNNN
stNNN
= parâmetro selecionado # NNN (i.e., -sp11 para temperatura)
= nível selecionado # NNN (i.e., -sp500 para obter campos de 500 mb)
= tal selecionado # NNN (i.e.., -st12 para obter o t=12 previsões)
A opção -s? pode ser enfileirada junto para sair um bem estreito conjunto de campos. Por exemplo
para sair somente a componente em 500 mb de u no t=48 use:
sp33 -sl500 -st48
136
Nota Especial aos usuários do NMC
O uma vez "padrão" cabeçalho de 81-bytes em um arquivo GRIB do NMC incluí o conjunto de
caracteres GRIB
Infelizmente, o mesmo conjunto de caracteres é parte da seção indicadora GRIB por si mesmo!
Assim, um exame automático para GRIB para demarcar o início dos dados falhará se o cabeçalho de
81-bytes estiver presente!
Assim, é necessário saber que os arquivos de fluxo do avn têm o cabeçalho de 81 byte e rode isto
como, gribscan -h81
Quando em dúvida (ou falha) tente -h81 -v.
Opções de Exibição:
q
q1
d
v
bd
gv
= saída rápida para extrair coisas que importam sobre o gribmap do GrADS
= uma linha de saída rápida
= modo delimitado comum
= modo prolixo aos diagnósticos
= informação da seção de dados binário
= usa a tabela de variável GRIB do NMC para saída mnemônica, título e unidades para
tabela padrão do NMC
gd = informação de saída para o sec defn da grade
S = silenciosa NENHUMA saída padrão
Alguns exemplos:
Primeiro,
cd /cray3_com_eta/PROD/erl.940829
Então,
1) Um "rápido" exame para obter as informações importantes do GrADS sobre:
gribscan -q -eu eta.T12Z.PGrbF48 | grep 184 :
184, F ,135,108,100,0,100,0,1e+09, T ,1994,8,29,12,0,1,48,0, G ,104, BDTG, 94082912
184
F
135
108
100
0
100
0
1e+09
T
1994
8
29
12
0
1
48
-
campo # no arquivo
dados do campo
param #
nível indicador
nível
l1 byte 1 do nível
l2 byte 2 do nível
indicador de limite de tempo
fator de escala decimal
dados do tempo seguinte
ano
mês
dia
hora
min
unidade de tempo (hora) da previsão
t=48h previsão
137
G
104
BDTG -
param de grade seguinte
grade #104 do NMC
Base do grupo data-tempo- (yymmddhh) seguinte
2) Saída delimitada por paipe para analisar gramaticalmente coisas como o awk:
gribscan -d -eu eta.T12Z.PGrbF48 | grep 184 :
PDS,184,104,135,108,100,0,100,1994,8,29,12,0,1,48,0,0,1e+09
mesmo como acima mas arranjado diferentemente
3) Uma listagem cheia:
gribscan -d -gv -bd -gd -eu eta.T12Z.PGrbF48 | grep 184 :
PDS,184,104,135,108,100,0,100,1994,8,29,12,0,1,48,0,0,1e+09,mconv, Horizontal moisture
divergênce,[kg/kg/s],GDS,5,147,110,-139.475,90.755,0.354,-0.268,-105.000,33536.000,0,
1,0,BDS,12, -646.844,16170,4825059,26366 onde
104
param #135
BDS
646.844
16170
4825059
26366
- id da grade
- mconv, Horizontal moisture divergence,[kg/kg/s] (mostrado pela opção -gv)
- seção de dados binário
- valor de ref
- # de pontos
- byte inicial dos dados
- comprimento da mensagem grib
N.B. não usando o -d dá uma saída tipo coluna fixa ...
4) Saída de uns campos poucos selecionados no GRIB:
gribscan -og -sp135 -q -eu eta.T12Z.PGrbF48 -o /wd2/wd20/wd20mf/tmp/eta.135
Escreve toda a mensagem do GRIB contendo a 135 parâmetro para o arquivo
/wd2/wd20/wd20mf/tmp/eta.135.grb. Um gribscan subsequente em eta.135.grb :
gribscan -q -eu eta.135.grb :
1, F ,135,108,100,0,100,0,1e+09, T ,1994,8,29,12,0,1,48,0, G ,104, BDTG, 94082912
2, F ,135,108,21860,85,100,0,1e+09, T ,1994,8,29,12,0,1,48,0, G ,104, BDTG, 94082912
Gribmap
Quando um arquivo descritor de dados no GrADS é montado (i.e., o arquivo ".ctl"), está se definindo,
externo para os dados por si mesmo, uma estrutura, -- como variáveis, como tempos em um arquivo
(ou conjunto de arquivos com a opção template), a dimensão espacial ou "forma" das variáveis, etc.
O formato do "GrADS" (flutuantes, ou 64-bit ou 32-bit IEEE dependendo da plataforma) é tão
simples que o relacionamento entre a estrutura de dados definida no arquivo .ctl é calculada e
armazenada em memória quando o arquivo é aberto.
O que faz o GRIB tão doloroso é que não há relacionamento entre os dados GRIB e o maior contexto
estrutural implicado pelo arquivo .ctl. Dai, a necessidade para um utilitário que "faça um mapa" entre
os dados do GRIB e a descrição de dados do GrADS.
Como isto realmente acontece no gribmap é que cada campo no arquivo de dados GRIB é lido e estes
parâmetros (variável, nível, tempo, etc.) são extraídos e comparados para TODAS as variáveis em
quaisquer um dos níveis/tempos/UNIDADES no arquivo .ctl até que uma combinação
(esperançosamente) seja encontrada.
Os novos recursos do gribmap permitem que restrições sejam colocadas nestes processos de
combinação. Entretanto, a primeira melhora na versão 1.5.1 é que ela suporta ambos GRIB0 e
GRIB1.... (versão 0 e versão 1).
138
Segundo o código agora exames automáticos para conjunto de caracteres "GRIB" ao invés de ter que
se preocupar sobre cabeçalhos e o que não (i.e., "lixo" entre o começo e o término da mensagem
GRIB). Que é a menos que você esteja no NMC e ponha (duh) GRIB no cabeçalho. O limite padrão
do exame é 1000 o qual pode ser mudado via a opção do comando de linha:
sxxxxx onde xxxxx é o número max de bytes para pesquisar entre os registros para GRIB.
Para desviar os bytes antes de começar o processo de exame:
hxxx
hnmc
onde xxx é o número de bytes, ou para o nmc:
Outros recursos invocados na linha de comando incluem:
v
t0
saída mais simpática para verificar o que se está tentando mapear...
uma combinação pode somente ocorrer se o tempo base no registro do grib é o mesmo
como o tempo inicial no arquivo .ctl. Este é usado para retirar uma seqüência de previsão
(0, 12, 24, ... ,72 h) começando em um tempo especifico (i.e., 95010300)
fxxx
onde xxx é o tempo de previsão em horas. Neste caso, uma combinação ocorre
somente se o tempo de previsão no registro grib combina xxx (horas). Isto é usado para
isolar uma seqüência de previsões, i.e., todas as 120h de previsões verificadas durante o
período de 00z1jan1995 até 12Z2jan1995 das rodadas por ensemble do MRF.
0 ignora o tempo de previsão na realização das comparações... Este é útil nas reanálises onde
algum dos campos diagnósticos são "válidos" em ligeiramente diferente tempo de previsão
ainda que eles dividam o mesmo tempo inicial.
Aqui esta um simpático truque. Para verificar o que é mapeado durante o gribmap:
gribmap -v -t0 ..... | grep MATCH todos registros combinados serão exibidos...
Outro recurso foi adicionado para mapear pelo "indicator-limite-tempo" do GRIB como especificado
no arquivo .ctl. Isto foi inserido para tratar de dados de reanálises do NMC onde o indicator-limitetempo distinguem entre variâncias de medias mensais e medias
Aqui um exemplo de reanálises (flux.ctl):
dset /d2/reanal/nmc/output/grib.v02/month.flux.%y2%m2.grb
undef 1.0e20
dtype grib
índice ^flux.gmp
título NMC-NCAR fluxo de reanálises/quantidades de grade gaussiana
options yrev template
xdef 192 linear 0 1.875
ydef 94 níveis -88.54195 -86.65317 -84.75323 -82.85077 -80.94736
79.04349
-77.13935
-75.23505
-73.33066
-71.42619
69.52167
-67.61710
-65.71251
-63.80790
-61.90326
59.99861
-58.09395
-56.18928
-54.28460
-52.37991
50.47522
-48.57052
-46.66582
-44.76111
-42.85640
40.95169
-39.04697
-37.14225
-35.23753
-33.33281
31.42809
-29.52336
-27.61863
-25.71391
-23.80917
21.90444
-19.99971
-18.09498
-16.19025
-14.28551
12.38078
-10.47604
-8.571312
-6.666580
-4.761841
139
2.857109 -0.9523697
0.9523621
2.857101
4.761833
6.666565
8.571304
10.47604
12.38077
14.28551
16.19024
18.09497
19.99970
21.90443
23.80917
25.71389
27.61862
29.52335
31.42808
33.33280
35.23752
37.14224
39.04697
40.95168
42.85638
44.76111
46.66580
48.57051
50.47520
52.37990
54.28459
56.18927
58.09395
59.99860
61.90326
63.80789
65.71249
67.61710
69.52165
71.42618
73.33064
75.23505
77.13934
79.04347
80.94736
82.85077
84.75322
86.65315
88.54195
zdef 1 linear 1 1
tdef 84 linear jan1985 1mo
vars 54
ps
0 1, 1, 0,113 Pressão [Pa]
tg
0 11, 1, 0,113 Temperatura da superfície [K]
tas
0 11,105, 2,113 2m Temperatura [K]
tg300 0 11,111,300,113 Temperatura 300 cm abaixo da superfície[K]
tg10 0 11,112, 10,113 Temperatura 10 cm abaixo da superfície[K]
tg200 0 11,112,2760,113 Temperatura 10-200 cm abaixo da superfície [K]
tcll
0 11,213, 0,113 Temperatura de Nuvem Baixa [K]
tclm 0 11,223, 0,113 Temperatura de Nuvem Media [K]
tclh 0 11,233, 0,113 Temperatura de Nuvem Alta [K]
tasmax
0 15,105, 2,113 Temperatura Máxima [K]
tasmin
0 16,105, 2,113 Temperatura Mínima [K]
uas 0 33,105, 10,113 u vento 10m [m/s]
vas 0 34,105, 10,113 v vento 10m [m/s]
huss 0 51,105, 2,113 Humidade especifica 2m [kg/kg]
pr
0 59, 1, 0,113 Valor de Precipitação [kg/m**2/s]
snm 0 65, 1, 0,113 Equiv de agua accum. neve profundidade [kg/m**2]
clt
0 71,200, 0,113 Cobertura de nuvem Total [porcentagem]
cll
0 71,214, 0,113 Cobertura de nuvem Total [porcentagem]
clm 0 71,224, 0,113 Coberturade nuvem Total [porcentagem]
clh
0 71,234, 0,113 Cobertura de nuvem Total [porcentagem]
albds 0 84, 1, 0,113 Albedo [porcentagem]
mrro 0 90, 1, 0,113 Runoff [kg/m**2]
sic
0 91, 1, 0,113 Concentração de Gelo (gelo=1; nenhum gelo=0) [1/0]
rss
0 111, 1, 0,113 Rede radiação de onda curta (superficie) [W/m**2]
rls
0 112, 1, 0,113 Rede radiação de onda longa (superficie) [W/m**2]
hfls 0 121, 1, 0,113 Fluxo de calor Latente [W/m**2]
hfss 0 122, 1, 0,113 Fluxo de calor Sensivel [W/m**2]
tauu 0 124, 1, 0,113 Componente Zonal de fluxo de momento [N/m**2]
tauv 0 125, 1, 0,113 Comp. Meridional de fluxo de momento [N/m**2]
mrso10
0 144,112, 10,113 Cont. Volum de Humid. de solo a 10 cm abaixo[fração]
mrs200
0 144,112,2760,113 Cont Vol. de Humid de solo 10-200cm abaixo [fração]
pevpr 0 145, 1, 0,113 Valor de evaporação Potencial [w/m**/]
gwdu 0 147, 1, 0,113 Estresse de Ondas de Gravidade Zonal [N/m**2]
gwdv 0 148, 1, 0,113 Estresse de Ondas de Gravidade Meridional [N/m**2]
gflux 0 155, 1, 0,113 Terra esquenta fluxo [W/m**2]
rsuscs 0 160, 1, 0,113 Ceú Claro fluxo solar para cima[W/m**2]
rsutcs 0 160, 8, 0,113 Ceú Claro fluxo solar para cima[W/m**2]
140
rsdtcs
rlutcs
rldscs
crfss
crfsa
crfst
crfls
crfla
crflt
rsds
rsdt
rlds
rsus
rsut
rlus
rlut
prc
endvars
0 161, 1, 0,113 Ceú Claro fluxo solar para baixo[W/m**2]
0 162, 8, 0,113 Ceu Claro fluxo de onda longo para cima [W/m**2]
0 163, 1, 0,113 Ceú Claro fluxo de onda longo para baixo [W/m**2]
0 164, 1, 0,113 Nuvem forçando rede fluxo solar na sfc [W/m**2]
0 164,200, 0,113 Nuvem forçando rede fluxo solar na atmos [W/m**2]
0 164, 8, 0,113 Nuvem forçando rede fluxo solar no topo [W/m**2]
0 165, 1, 0,113 Nuvem forçando rede fluxo de onda longa na sfc [W/m**2]
0 165,200, 0,113 Nuv. forçando rede fluxo de onda longo na atm [W/m**2]
0 165, 8, 0,113 Nuvem forçando rede fluxo de onda longo em topo [W/m**2]
0 204, 1, 0,113 Fluxo de radiação solar para baixo na sfc [W/m**2]
0 204, 8, 0,113 Fluxo de radiação solar para baixo no topo [W/m**2]
0 205, 1, 0,113 Fluxo de radiação de onda longo para baixo na sfc[W/m**2]
0 211, 1, 0,113 Fluxo de radiação solar para cima na sfc [W/m**2]
0 211, 8, 0,113 Fluxo de radiação solar para cima no topo [W/m**2]
0 212, 1, 0,113 Fluxo de radiação de onda longa para cima na sfc [W/m**2]
0 212, 8, 0,113 Fluxo de radiação de onda longo para cima no topo [W/m**2]
0 214, 1, 0,113 Valor de precipitação Convectiva [kg/m**2/s]
O parâmetro de quatro unidades na descrição da variável é 113 para uma média, para variância:
.uas
vas
huss
endvars
0 33,105, 10,118 10m vento comp u [m/s]
0 34,105, 10,118 10m vento comp v [m/s]
0 51,105, 2,118 2m Umidade Especifica [kg/kg]
Se o indicador do limite de tempo não foi entendido, então consulte o Evangelho do GRIB segundo
John Stackpole (que e; Nota Oficial do NMC 388).
141
Apêndice C: Usando GrADS no PC
Conjunto de dados de outras plataformas
O conjunto de dados binários em grade pode ser movido de qualquer máquina de UNIX para o PC e
exibido usando o GrADS. O PC tem uma diferente ordem de byte que a maior parte dos ambientes
UNIX, tais como Sun, IBM, Íris, e CRAY IEEE. O PC tem a mesma ordem de bytes como estações
DEC. Simplesmente mova o conjunto de dados em formato de grade do GrADS em modo binário,
então se necessário coloque a palavra-chave de BYTESWAPPED na linha de OPTIONS do
descritor do arquivo de dados. Veja o Capítulo 4 para mais informações.
Imprimindo em impressoras sem postscript
Se não tem uma impressora de postscript disponível, deve-se obter o ghostscript, um utilitário para
imprimir arquivos postscript em impressoras sem postscript. Este utilitário está disponível de várias
fontes de ftp anonymous e trabalha extremamente bem.
Incorporando gravuras do GrADS dentro de software de PC
Ghostscript vem com um utilitário, ps2epsi, que converterá arquivos postscript dentro de postscript
encapsulado (.eps) conveniente para importar dentro de software gráficos. Infelizmente, muitos dos
filtros importadores gráficos esperam arquivos .eps compatíveis com o Adobe Ilustrador e a
importação falha. Há duas soluções para este problema. Pode-se converter a gravura para um bitmap
usando Ghostscript ou qualquer utilitário de captura de tela. Se for necessário editar a gravura, ou
remodela-la, será necessário um programa igual ao CorelDraw 5 o qual importa arquivos postscript
diretamente (não será necessário usar o utilitário do Ghostscript). Este trabalha bem para gravuras sem
sombreado, por exemplo, desenhos de contorno, e para saída sombreadas em impressora colorida.
Saída de gravuras sombreadas em uma Laserjet usando escala de cinza, entretanto, não tem a mesma
qualidade como quando saída para uma impressora de postscript.
A versão do beta 1.5x do GrADS vem com um muito útil utilitário do MS WINDOWS, o gv.exe.
Este importara meta arquivos do GrADS diretamente e esses podem então ser passados dentro de
outras aplicações do Windows. Embora em um estágio próximo de desenvolvimento, o gv oferecerá
uma melhor solução até agora para imprimir e editar suas gravuras do GrADS em uma impressora
laser monocromática.
142
Apêndice D: Facilidades de Rede Relacionados ao GrADS
Há um número de sites de rede oferecendo várias instalações de apoio aos usuários do GrADS. Estas
estão listadas sem nenhuma ordem particular de importância, mas uma assinatura ao listserver é
altamente recomendado como um primeiro passo para obter informação de minuto, tão bem como
ajudar com problemas particulares/técnicos. Omissões são involuntárias. Comunique sobre quaisquer
outros sites úteis por email ([email protected]).
Tom Holt, Setembro 1995.
Sites de ftp
Os seguintes sites de ftp contêm atualizações, documentação, etc. nas várias versões do GrADS para
todas as plataformas disponíveis.
grads.iges.org
Este é o site de ftp do GrADS contendo documentação oficial e executáveis de Brian Doty, o autor do
GrADS. Em conexão, você está imediatamente no principal diretório do GrADS.
sprite.llnl.gov
Este site contem documentação e executáveis das versões do GrADS em desenvolvimento do GrADS
produzido pelo time de desenvolvimento do GrADS e Mike Fiorino. Estas estão provavelmente
mudando antes de serem incorporadas dentro da mais recente "oficial" versão do GrADS. Mesmo
assim, há muita informação útil aqui e as versões do GrADS são muitas usáveis. Esta documentação é
baseada em uma versão do GrADS obtida deste site.
Em conexão, faca cd pub/fiorino/grads para obter as coisas do GrADS.
Listserver
[email protected]
O listserver automaticamente despacha mensagens para todos os usuários assinados. Tipicamente as
mensagens contêm uma solicitação para ajuda e, esperançosamente, soluções para a solicitação dos
usuários os quais tem resolvido o problema. Referência é freqüentemente feita para atualizações do
GrADS e como obtê-las.
Usando email, envie uma mensagem ao endereço acima contendo somente as palavras help
subscriber para detalhes sobre como registrar-se como listserver.
Uma vez assinado, leia a importante informação com respeito a enviar as mensagens .etc. Muito
cuidadosamente e armazenar este em um lugar seguro em seu computador.
Sites na WWW
Há um número de sites da Web Globais oferecendo informação do GrADS.
Os seguintes dois sites estão no servidor web do COLA (Centro para Estudos Oceâno-TerraAtmosfera).
143
http://grads.iges.org/grads/head.html
É a home page do GrADS.
http://grads.iges.org/home.html
A home page do COLA, está contêm mapas de tempo e clima gerados pelo GrADS. O COLA
esta também tentando fornecer links para outros relacionados servidores do GrADS.
http://dao.gsfc.nasa.gov/grads_listserv/INDEX.html
Mantém um arquivo dos emails mandados ao listserver do GrADS.
144
Download

Manual GrADS