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