Você está na página 1de 98

UNIVERSIDADE FEDERAL DE PELOTAS F ACULDADE DE METEOROLOGIA DEPARTAMENTO DE METEOROLOGIA

Introduo ao NCAR Command Language (NCL), com aplicaes em Meteorologia

Apostila gerada por meio do pro jeto de ensino

Elaborao de um Guia em Portugus do NCAR Command Language com aplicaes em Meteorologia, cadastrado na Pr-Reitoria
de Graduao da Universidade Federal de Pelotas sob o nmero 002.2011.

Mateus da Silva Teixeira, Vancia Schumacher Pogorzelski, Stefane Fonseca Freitas e Carina Klug Padilha Reinke

Novembro, 2011

Prefcio
Esta apostila busca passar aos seus leitores uma breve introduo ao NCAR

Command Language, um pacote de processamento e visualizao de dados


geofsicos desenvolvido pelo National Centers for Atmospheric Research, dos Estados Unidos.

A elaborao deste livro-apostila baseada fortemente nos manuais originais do NCL, em PDF. Tanto que as suas estruturas de captulos so muito similares. Entretanto, como o objetivo deste material oferecer um suporte mais didtico, especialmente ao usurio iniciante, procurou-se oferecer ao longo do texto exemplos mais simples, que permitam o uso rpido e fcil das potencialidades desta linguagem.

impossvel abordar toda a potencialidade no NCL em algumas pginas, o que torna essencial ao usurio visitas constantes ao site ocial do NCL (http://www.ncl.ucar.edu) e a participao nas listas de discusso.

Algumas situaes mais especiais, mas que despendem uma dissertao maior que aquela proposta no corpo principal do texto, so apresentadas nos apndices. Situaes como acentuao de texto e mapas com diviso poltica para o Brasil so exemplos do que ser encontrado nos apndices.

Os autores gostariam de contar com a ajuda dos leitores na constante melhora deste livro-apostila, seja com a indicao de problemas com o texto e exemplos quanto com sugestes para os mesmos. As colaboraes podem ser enviadas diretamente aos autores, por meio do endereo eletrnico mateus.teixeira@ufpel.edu.br.

Agradecimentos
Os autores desta apostila gostariam de agradecer ao Sr. Dennis Shea e a Sra. Mary Haley por terem gentilmente permitido a confeco de uma traduo dos manuais para o Portugus e pela ajuda provida durante os ltimos anos na realizao de tarefas com o NCL.

Sumrio
1 Introduo
1.1 1.2 Instalao . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9
10 13

Executando o NCL . . . . . . . . . . . . . . . . . . . . . . . .

A Linguagem
2.1 2.2 2.3 2.4 2.5 2.6 Smbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15
15 16 16 16 18 19 19 22 23 23 24 24 25

Palavras-chave reservadas

Expresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Controlando a execuo de comandos . . . . . . . . . . . . . . 2.6.1 2.6.2 Laos de repetio A construo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

if ... else ... end if

2.7

Dimenses e indexao . . . . . . . . . . . . . . . . . . . . . . 2.7.1 2.7.2 Indexao padro . . . . . . . . . . . . . . . . . . . . . Indexao por coordenadas . . . . . . . . . . . . . . . .

2.8 2.9

Reduo de dimenso . . . . . . . . . . . . . . . . . . . . . . . Dimenses nomeadas . . . . . . . . . . . . . . . . . . . . . . .

6
2.9.1

SUMRIO
Reordenao de dimenses . . . . . . . . . . . . . . . . 25 26 26 27 27 28 28

2.10 Variveis de coordenadas . . . . . . . . . . . . . . . . . . . . . 2.11 Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.12 _FillValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.13 Coero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.14 Variveis e metadados

2.15 Apagando variveis, atributos e coordenadas . . . . . . . . . .

Arquivos de Entrada/Sada do NCL


3.1 Arquivos Suportados 3.1.1 3.2 . . . . . . . . . . . . . . . . . . . . . . .

31
31 34 35 35 36 37 38 38 40 42 43

Abrangendo mltiplos arquivos: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Arquivos de Dados Binrios 3.2.1 3.2.2

Lendo arquivos binrios:

Escrevendo arquivos binrios:

3.3

Arquivos de Dados ASCII 3.3.1 3.3.2

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Abrindo arquivos ASCII

Escrevendo arquivos ASCII:

3.4

Escrevendo arquivos netCDF/HDF 3.4.1

Escrevendo escalares em netCDF: . . . . . . . . . . . . . . . . . . . . . . . . .

3.5

Acesso arquivos remotos: OPenDAP

Impresso
4.1 4.2 4.3 4.4 printVarSummary . . . . . . . . . . . . . . . . . . . . . . . . . print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sprintf e sprinti write_matrix . . . . . . . . . . . . . . . . . . . . . . . . . .

45
45 46 47 49

. . . . . . . . . . . . . . . . . . . . . . . . . . .

SUMRIO
5 Anlise de Dados
5.1 5.2 5.3 5.4 Sintaxe de arranjos . . . . . . . . . . . . . . . . . . . . . . . . Conformao da matriz . . . . . . . . . . . . . . . . . . . . . . Alocao de memria com arranjos Funes e subrotinas . . . . . . . . . . . . . . .

7
51
51 53 54 55

. . . . . . . . . . . . . . . . . . . . . . .

Linhas de comando
6.1 6.2 Alterando o comportamento do NCL . . . . . . . . . . . . . . . .

57
57 58

Especicando atribuies de varivel na linha de comando

Usando cdigos externos


7.1 7.2 7.3 7.4 7.5 7.6 7.7 Interface NCL/Fortran . . . . . . . . . . . . . . . . . . . . . . Subrotinas em Fortran 77 Subrotinas em Fortran 90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

61
61 62 63 64 65 66 67

Usando bibliotecas comerciais O que o WRAPIT faz

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Mapeamento de arranjos NCL/Fortran

NCL e Fortran (ou C) em um script Shell

Grcos
8.1 8.2 8.3 8.4 8.5 Um script simples . . . . . . . . . . . . . . . . . . . . . . . . . Recursos grcos (resources ) . . . . . . . . . . . . . . . . . . . Plotando campos meteorolgicos . . . . . . . . . . . . . . . . . As funes

69
70 72 74 77 79

draw e frame . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .

Campos meteorolgicos sobre mapas

8
A Acentuando palavras em grcos do NCL

SUMRIO
83

B Lendo arquivos ASCII complicados

89

C Diviso poltica em mapas

91

D Valores ausentes no NCL


D.1 D.2 D.3 D.4 O uso de _FillValue em funes do NCL . . . . . . . . . . . . Valores ausentes padro O atributo missing_value _FillValue = 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

95
96 97 97 98

. . . . . . . . . . . . . . . . . . . . . . . . . .

Captulo 1 Introduo
O estudo dos fenmenos meteorolgicos est fortemente ligado a anlise de dados observacionais. O conhecimento das variaes de temperatura, umidade e presso, bem como de suas distribuies espaciais permite uma descrio detalhada dos sucessivos estados da atmosfera terrestre e, portanto, da sua evoluo no tempo. Nas primeiras investigaes da atmosfera, os dados eram plotados manualmente em mapas geogrcos. Uma vez plotados, os mapas meteorolgicos eram analisados pelos meteorologistas durante a confeco das previses meteorolgicas. A demora na obteno dos dados, a existncia de erros provocados por diculdades na sua transmisso entre os pontos geradores e os centros de anlise, unidos ao tempo gasto na plotagem manual impossibilitavam a gerao de diagnsticos do tempo, em maior frequncia. Com o advento dos computadores, o processo de plotagem foi se tornando cada vez mais rpido. Algoritmos mais complexos e ecientes foram sendo desenvolvidos com o objetivo de se obter descries espaciais das variveis meteorolgicas com melhores qualidades que aquelas feitas manualmente. Hoje em dia, a inspeo manual se faz mais importante na etapa de anlise das cartas meteorolgicas do que na vericao da qualidade dos grcos gerados. possvel armar, inclusive, que a maioria seno a totalidade das cartas plotadas hoje em dia so feitas com a ajuda de computadores. Caminhando no mesmo ritmo est o processamento dos dados. Enquanto

que nos primrdios da meteorologia as calculadoras manuais eram usadas, tornando a tarefa rdua, cansativa e suscetvel a erros, nos tempos atuais o

10

Captulo 1. Introduo

computador se tornou uma pea indispensvel na anlise e interpretao dos dados meteorolgicos. H vrios softwares que oferecem ferramentas para a anlise e plotagem de dados meteorolgicos. Cada um com as suas vantagens e desvantagens. A Linguagem de Comandos do NCAR (NCAR Command Language, NCL) se destaca por apresentar, num nico pacote computacional, ferramentas que possibilitam o acesso a vrios formatos de arquivos de dados, a realizao de clculos estatsticos e fsicos e que oferecem a plotagem de grcos com excelente qualidade, particularmente importante gerao e publicao de artigos, trabalhos, livros etc. O NCL uma linguagem de programao interpretada, especicamente designada para acessar, analisar e visualizar dados. Possui muitas caractersticas comuns a de outras linguagens de programao modernas, incluindo tipos de dados, variveis, operadores, expresses, declaraes condicionais, controladores de uxo, alm de possibilitar a criao de funes e subrotinas. um software gratuito, com grande parte de seu cdigo livre, e est disponvel para sistemas Linux/Unix, MacOSX e Windows (Cygwin).

1.1 Instalao
Os desenvolvedores do NCL recomendam a instalao dos arquivos binrios executveis, disponveis para download no site do NCL. Entretanto, estes arquivos esto disponibilizados apenas para algumas verses dos compiladores GCC e de distribuies do Linux. NCL a partir do seu cdigo fonte. Ao usurio deste guia recomendada a leitura cuidadosa das instrues de instalao disponveis no site Install NCL/NCAR Graphics , para a instalao dos arquivos binrios disponveis, e no site How to build and install NCAR Assim, poder-se- necessrio instalar o

Graphics and the NCAR Command Language , para a instalao do NCL a


partir do seu cdigo fonte. Abaixo so mostrados, rapidamente, os passos para a instalao dos arquivos binrios em sistemas Linux, mas antes de instal-lo deve-se obter algumas importantes informaes a respeito da distribuio Linux usada:

Obter o nome do hardware da mquina usada, digitando, num terminal, o comando

uname -m. Exemplo: i686.

1.1. Instalao

11

Obter o sistema operacional usado, digitando, num terminal, o comando

uname -s. Exemplo: Linux.

Obter a verso do GCC usado, digitando, num terminal, o comando

gcc -v. Exemplo: 4.3.2.

Na

posse

destas

informaes,

http://www.earthsystemgrid.org

possvel verso do

baixar NCL

do

site para

apropriada

o sistema, que, a partir das informaes acima obtidas, seria

ncl_ncarg-

5.2.1.Linux_i686_gcc432.tar.gz.
A seguir, deve-se descompactar este arquivo, digitando, num terminal: trios: bin/, lib/ e include/. Como administrador do sistema (usurio root ), realize os seguintes passos:

tar

zxvf ncl_ncarg-5.2.1.Linux_i686_gcc432.tar.gz, que criar trs dire-

1. Criar um diretrio chamado ncarg em /usr/local (local padro de instalao), digitando o seguinte comando no terminal do Linux:

mkdir

/usr/local/ncarg
2. Mover os diretrios bin/, lib/ e include/ para o diretrio /usr/local/ncarg, digitando o comando:

mv bin/ lib/ include/ /usr/local/ncarg

Caso no seja permitida esta operao, por no ser o administrador do sistema, possvel instalar o NCL na rea de trabalho do usurio, ou seja, em

/home/<usurio>/ncarg (sendo <usurio> o nome do usurio com acesso


ao sistema). Suponha que o usurio manoel quer instalar o NCL em sua rea de trabalho local. Assim, ele realizar os seguintes passos:

1. Criar o diretrio ncarg em seu diretrio de trabalho, com o comando:

mkdir /home/manoel/ncarg
2. Mover os diretrios bin/, lib/ e include/ para o diretrio /home/manoel/ncarg, digitando o comando:

mv bin/ lib/ include/ /home/manoel/ncarg

1 necessrio realizar um cadastro gratuito e rpido neste site para se ter acesso ao
download dos arquivos de instalao do NCL.

12

Captulo 1. Introduo

Agora, falta apenas congurar o ambiente do Linux para que se possa usar o NCL. Antes, preciso saber qual o shell usado em seu sistema. Obtenha esta informao digitando no terminal do Linux o comando

echo $SHELL.

Se a resposta deste comando for /bin/bash, voc deve editar ou criar o arquivo

.bashrc, localizado no diretrio de trabalho do usurio, e inserir as seguintes


linhas:

NCARG_ROOT=/usr/local/ncarg PATH=$NCARG_ROOT/bin:$PATH export NCARG_ROOT PATH


se o NCL foi instalado em seu local padro, como administrador do sistema, ou

NCARG_ROOT=$HOME/ncarg PATH=$NCARG_ROOT/bin:$PATH export NCARG_ROOT PATH


se o NCL foi instalado na rea de trabalho do usurio. Se a resposta ao comando

echo $SHELL for /bin/csh, voc deve editar ou

criar o arquivo .cshrc, tambm localizado no diretrio de trabalho do usurio, e inserir as seguintes linhas:

setenv NCARG_ROOT /usr/local/ncarg setenv PATH $NCARG_ROOT/bin:$PATH


se o NCL foi instalado em seu local padro ou

setenv NCARG_ROOT $HOME/ncarg setenv PATH $NCARG_ROOT/bin:$PATH


se o NCL foi instalado no diretrio de trabalho do usurio.

DICA: caso o terminal no qual as operaes acima tenham sido realizadas


no tenha sido fechado, deve-se carregar o arquivo .bashrc memria. Para isso, digite no terminal:

source .bashrc.

No esquea do ponto antes de

bashrc ! Ele faz parte do nome do arquivo; neste caso, um arquivo oculto.

1.2. Executando o NCL

13

1.2 Executando o NCL


O NCL pode ser executado interativamente ou em modo de lote (batch mode) .

O primeiro permite que os comandos sejam digitados um a um

dentro do ambiente do NCL, enquanto que o segundo usado, normalmente, para automatizar tarefas. O NCL sensvel caixa de texto, ou seja, A e a so considerados diferentes (ao contrrio do Fortran, por exemplo). Todas as linhas de comando requerem um caractere de nal de linha (carriage return, fornecido ao pressionar ENTER) para naliz-las.

Modo interativo: abaixo apresentada uma sesso simples de uso interativo do NCL.

$ ncl Copyright (C) 1995-2010 - All Rights Reserved University Corporation for Atmospheric Research NCAR Command Language Version 5.2.1 The use of this software is governed by a License Agreement. See http://www.ncl.ucar.edu/ for more details. ncl 0> a=(/1,2,3/) ncl 1> print(a) Variable: a Type: integer Total Size: 12 bytes 3 values Number of Dimensions: 1 Dimensions and sizes: [3] Coordinates: (0) 1 (1) 2 (2) 3 ncl 2> quit $

Neste exemplo, um vetor a, com 3 elementos numricos, criado e exibido na tela com o comando

print. Aqui $ representa o prompt do Linux.

2 Aqui, lote refere-se execuo de scripts, que podem ser considerados como um lote
ou conjuntos de comandos do NCL

14

Captulo 1. Introduo

Modo de lote (Batch mode ): abaixo so apresentadas trs formas para


se executar scripts em NCL, assumindo que o script encontra-se no arquivo

teste.ncl e que o shell Bash est sendo usado:

ncl ncl ncl ncl

teste.ncl teste.ncl >& teste.out teste.ncl >& teste.out & < teste.ncl

[aceitvel]

No segundo e terceiro exemplos especicado um arquivo teste.out, que receber todo e qualquer texto que seria impresso na tela.

DICA: os arquivos em lote, ou scripts, tm, frequentemente, o suxo .ncl.


Isto apenas uma conveno, no sendo, portanto, necessrio. Mesmo assim, o uso do suxo .ncl

recomendado, pois permite a identicao dos scripts

em um diretrio com vrios arquivos.

O NCL permite a especicao de vrias opes na linha de comando. A linha de comando ncl -h exibir as opes atualmente suportadas. A atribuio de variveis em linha de comando discutida no Captulo 6. As funes e/ou subrotinas e variveis localizados em arquivos externos podem ser acessados por meio de load "minhas_funcoes.ncl" load "$HOME/meus_scripts/funcoes.ncl" external DEMO "minha_funcao.so" que podem ser digitadas dentro do ambiente interativo do NCL ou no incio de um script em NCL. As duas primeiras linhas mostram como carregar variveis e funes e/ou subrotinas localizados em outros arquivos contendo scripts em NCL. A ltima linha mostra como carregar uma determinada funo ou subrotina (DEMO), contida na biblioteca compartilhada minha_funcao.so. O uso de cdigos externos, feitos em C e Fortran, abordado no Captulo 7.

Captulo 2 A Linguagem
2.1 Smbolos
Os smbolos de sintaxe normalmente usados incluem:

; @ ! & {. . . } $

inicia um comentrio cria/referencia atributos cria/referencia dimenses nomeadas cria/referencia uma varivel de coordenada usado para subindexao de coordenada encerra strings ao importar/exportar variveis via

add-

le

[. . . ]
(/. . . /) : |

sub-indexa variveis do tipo lista constri uma arranjo (vetor ou matriz) usado na sintaxe de arranjos usado como um separador para dimenses nomeadas indica que a declarao continua na prxima linha usado como um separador ao chamar cdigos externos usado para a entrada/sada de dados de arquivos em um dos formatos suportados

\
:: ->

Estes smbolos sero usados ao longo deste guia em exemplos prticos, portanto, o usurio no deve se preocupar com eles agora.

15

16

Captulo 2. A Linguagem

2.2 Tipos de dados


O NCL permite a manipulao de dados numricos e no-numricos em vrios formatos distintos.

Numricos: double (64 bits), oat (32 bits), long (32 ou 64 bits), integer
(32 bits), short (16 bits) e byte (8 bits). O tipo complex no suportado.

No-numricos: string, character, graphic, le, logical e list.

2.3 Palavras-chave reservadas


Assim como em toda linguagem de programao, o NCL possui um conjunto de palavras-chave que no podem ser usadas para nomear variveis e funes. Estas palavras-chave esto, normalmente, associadas a funes, comandos e tipos de dados do prprio NCL.

begin, break, byte, character, continue, create, defaultapp, do, double, else, end, external, False, le, oat, function, getvalues, graphic, if, integer, load, local, logical, long, new, noparent, numeric, procedure, quit, Quit, QUIT, record, return, setvalues, short, string, then, True, while, e todos os nomes de funes e procedimentos
internos (built-in).

2.4 Expresses
As regras de precedncia pode ser alteradas pelo uso de parnteses (...) ao redor das expresses. O NCL no opera em nenhum elemento de arranjos cujo valor foi denido como

_FillValue (veja seo 2.13).

Operadores algbricos:
1 Arranjos, ou array, um termo usado em informtica que refere-se a conjuntos de
elementos, geralmente, do mesmo tipo de dados. Os arranjos podem ser unidimensionais (vetores), bidimensionais (matrizes) e multidimensionais.

2.4. Expresses
+ adio (+ um operador sobrecarregado. Ele tambm usado na concatenao de strings) subtrao multiplicao exponenciao mdulo, somente inteiros (integer) multiplicao matricial maior que, menor que

17


% # >,<

Abaixo, exemplos de expresses algbricas que podem ser vericados com o comando

print:

x=10+11 y=10-11 z=1011.1 k=x 2 l=10%11 m=10<11

Operadores lgicos:

.lt. .le. .gt. .ge. .ne. .eq. .and. .or. .xor. .not.

menor que menor ou igual a maior que maior ou igual a diferente de igual a e ou ou exclusivo no

Abaixo, exemplos de expresses lgicas que tambm podem ser vericados com o comando

print:

18
x=10.lt.11 y=10.le.11 z=10.gt.11.1 i=10.eq.11 k=.not.x l=10.ne.11 m=x.and.y n=x.or.y m=x.xor.y

Captulo 2. A Linguagem

2.5 Variveis
Os nomes das variveis devem comear com um caractere alfabtico, mas podem conter qualquer combinao de caracteres numricos e alfabticos. O uso do smbolo  _ tambm permitido. As variveis podem ter informaes auxiliares (frequentemente chamadas de metadados) anexadas. Os metadados pode ser acessados, criados, modicados e apagados por meio da sintaxe e funes disponveis no NCL (conforme mostrado nas sees 2.10-2.12) As variveis importadas por meio da funo

addle contero automatica-

mente todos os metadados disponveis associados com elas. Exemplos de nomes de variveis vlidos: teste, teste123, teste_123, _123teste,

_123
Exemplos de nomes de variveis invlidos: 123teste, quit, begin, @123 A criao de variveis pode ser feita de dois modos: por atribuio ou com o comando

new. No primeiro modo, o tipo de dado associado varivel

denido pelo valor atribudo a ela. Por exemplo, x=10 cria uma varivel x do tipo inteiro (integer ). J teste=False cria uma varivel teste do tipo lgico (logical ). No caso de lista=(/"um","dois","tres"/), cria-se uma varivel lista, contendo trs strings. Em outras palavras, cria-se um vetor do tipo string. Certas situaes demandam a criao de variveis vazias para futuro preenchimento - normalmente para vetores e matrizes, Neste caso, o comando

new pode facilitar a vida. Suponha que deseja-se criar uma matriz do tipo
inteira com duas linhas e trs colunas, que ser preenchida posteriormente. Neste caso, x =

new( (/2,3/), integer )

2.6. Controlando a execuo de comandos


A sintaxe do comando

19

new

varivel = new( tamanho das dimenses, tipo de dado, _FillValue )


que, comparada ao exemplo dado, apresenta uma opo a mais, opcional:

_FillValue.

Nesta opo dene-se o valor a ser usado nos elementos aos

quais nenhum valor foi atribudo. Como isto no foi especicado na criao de x, o _FillValue padro usado, ou seja, -999. Verique com o comando

print.

2.6 Controlando a execuo de comandos


Normalmente, uma tarefa realizada por meio de uma sequncia de comandos, que devem ser executados um aps o outro. Entretanto, a sequncia de execuo de comandos pode ter de ser alterada para que a tarefa seja satisfatoriamente realizada. O NCL fornece meios de controle de execuo de comandos. possvel repetir comandos por um certo nmero de vezes ou de acordo com uma condio, bem como escolher entre dois conjuntos de comandos se um critrio for atendido ou no.

2.6.1

Laos de repetio

comum a necessidade de repetio de partes de um cdigo para a realizao de uma tarefa, particularmente comum quando trata-se de arranjos multidimensionais. Em linguagem de programao d-se a este tipo de mecanismo o nome de lao de repetio ou loops.

O uso de loops deve ser minimizado em uma linguagem interpretada. Frequentemente, os loops podem ser substitudos por uma sintaxe de arranjos ou por uma funo interna. Se mltiplos loops so necessrios e a velocidade de execuo importante, o uso de cdigos externos, em Fortran ou em C, podem ser a melhor escolha (ver Captulo 7).

O NCL disponibiliza dois mecanismos de repetio de comandos:

20
do ... end do
Sintaxe:

Captulo 2. A Linguagem

do n=incio,m,incremento_opcional
[comandos ]

end do
sendo n uma varivel do tipo integer ; incio e m o intervalo de variao da varivel n, que pode modicar-se de acordo com incremento_opcional. Entre

do e end do so colocados os comandos que deseja-se repetir. Veja o

exemplo,

do i=1,100
print("O valor de i eh "+i)

end do
Neste exemplo, a frase O valor de i eh , seguido do valor da varivel i impresso na tela 100 vezes. O exemplo seguinte mostra o uso do incremento opcional:

do i=1,100,2
print("O valor de i eh "+i)

end do
que imprimir na tela, 50 vezes, a mesma frase do exemplo anterior. Compare os valores de i entre estes dois exemplos.

do while ... end do


Sintaxe:

do while (expresso_lgica_escalar )
[comandos ]

end do
sendo expresso_lgica_escalar uma expresso que resulte num valor lgico, ou seja, verdadeiro (True) ou falso (False). Enquanto esta expresso for considerada verdadeira, os comandos entre Veja um exemplo, x=1

do while e end do sero realizados.

do while (x.le.10)

2.6. Controlando a execuo de comandos


print("O valor de x eh "+x) x=x+1

21

end do
que mostra que os comandos entre

do while e end do so executados en-

quanto x for menor ou igual que (operador lgico .le.) 10.

break e continue

H dois comandos que so usados para alterar o funcionamento normal dos laos de repetio comando

do ... end do e do while ... end do. O primeiro o end do. Veja o exemplo,

break, que permite interromper a execuo dos comandos internos

ao loop, saltando ao primeiro comando aps o

x=1

do while (x.le.10)
print("O valor de x eh "+x) x=x+1 break

end do
que imprimir apenas uma vez a frase dada ao comando comando

print. O segundo o

continue, que permite interromper a sequncia normal de execuo

dos comandos internos ao loop, voltando ao primeiro comando interno ao loop, sem sair dele. Veja o exemplo,

x=1

do while (x.le.10)
print("O valor de x eh "+x) x=x+1 continue print("Esta frase nunca serah impressa!!)

end do
que no imprimir na tela a frase Esta frase nunca serah impressa!!, pois o comando

continue ordena que o loop volte ao primeiro comando, no print que localiza-se aps continue.

executando o comando

22
2.6.2

Captulo 2. A Linguagem
A construo if ... else ... end if

Por vezes, pode ser importante estabelecer um critrio que denir que conjunto de comandos ser executado. Este critrio fornecido por meio de uma expresso lgica, ou seja, uma expresso que compara dois valores e/ou variveis, resultando num valor lgico, ou seja, verdadeiro ou falso. O NCL oferece, para este m, a construo Sintaxe(1):

if ... else ... end if.

if (expresso_lgica_escalar ) then
[comandos ]

end if
Sintaxe(2):

if (expresso_lgica_escalar ) then
[comandos ]

else
[comandos ]

end if
O exemplo abaixo mostra que se x for maior que zero, os comandos entre e

if

end if so executados.
x=1

if (x .gt. 0) then
print("x eh maior que zero!")

end if
O exemplo igual ao anterior, mas inclui um comando adicional para ser executado no caso da condio vericada (x .gt. 0 ) for falsa. x=1

if (x .gt. 0) then
print("x eh maior que zero!")

else
print("x eh menor ou igual a zero!")

end if
possvel combinar condies, utilizando os operadores lgicos e

.and., .or.

.xor.. Veja um exemplo abaixo:


x=1

if (x .ge. 0 .and. x .le. 10) then

2.7. Dimenses e indexao


print("x estah entre zero e 10!")

23

else
print("x estah fora do intervalo [0,10]!")

end if

2.7 Dimenses e indexao


H duas maneiras de se referenciar a elementos de arranjos: a padro e por coordenadas. De forma geral, elas so similares quelas disponveis em outras linguagens como Fortran 90, Matlab e IDL. Em outras palavras, elas so feitas da seguinte maneira: incio : m : intervalo sendo incio e m os ndices inicial e nal que determinaro o grupo de elementos que sero acessados. A opo intervalo, que opcional, altera a variao do ndice, entre os limites inferior (incio ) e superior (m ), que por padro 1. Este mesmo esquema funciona para acesso via coordenadas.

2.7.1

Indexao padro

No NCL, os ndices iniciam em 0 e terminam em N-1, sendo N o nmero total de elementos (Em Fortran, por exemplo, os ndices de arranjos comeam em 1 e terminam em N). Considerando um arranjo unidimensional, com elementos, x=(/1,2,3,4,5,6/) os elementos de print(x(0)) print(x(4)) ou em grupos, print(x(0:2)) print(x(3:)) ; imprime 1, 2 e 3 ; imprime 4, 5 e 6

N =6

podem ser acessados individualmente, ; imprime 1 ; imprime 5

24

Captulo 2. A Linguagem

Note que na construo incio:m, a ausncia de um deles equivale ao acesso desde o primeiro ou at o ltimo, respectivamente. Assim, consequentemente,

x(:)

equivalente a todos os elementos.

2.7.2

Indexao por coordenadas

O uso da indexao por coordenadas requer que as dimenses de um arranjo tenham um nome e que tenham variveis de coordenada atribudas a elas.Maiores detalhes so dados na seo 2.10. A indexao por coordenadas usada colocando-se as coordenadas entre chaves  .... Para ns de exemplicao, as linhas de comando do NCL abaixo mostram a utilizao desta forma de indexao: x=(/1,2,3,4,5,6/) x!0="lat" x&lat=(/-10,-20,-30,-40,-50,-60/) print(x(1)) print(x({-20})) Note que os dois comandos

print imprimem o mesmo resultado, ou seja,

acessam o mesmo elemento do vetor x. O primeiro usa a indexao padro, enquanto o segundo usa as informaes de coordenadas atribudas aos dados. Fica bvia a facilidade de acesso a certos elementos de um arranjo ao se utilizar coordenadas.

2.8 Reduo de dimenso


Quando uma constante usada na indexao de um arranjo - padro ou por coordenadas - ocorre uma reduo de dimenso. Isto ilustrado pelas linhas de comando abaixo: y = (/ (/10,20,30,40/),(/20,30,40,50/) /) y1 = y(0,:) print(y1) Na primeira linha um arranjo bidimensional contendo duas linhas e quatro colunas armazenado na varivel y. Na segunda linha usa-se uma constante na primeira dimenso de y. A varivel y1 contem uma dimenso a menos que y, ou seja, foi provocada uma diminuio da dimenso de y ; ela contm

2.9. Dimenses nomeadas

25

apenas a primeira linha do arranjo y. Esta operao no provoca perda de metadados, exceto aqueles relacionados dimenso eliminada. eliminada. Seguindo o exemplo anterior, y2 = y(0:0,:) Esta linha de cdigo provoca a reteno da primeira dimenso de y. Aplique a funo Caso no se queira perder estes metadados, pode-se forar a reteno da dimenso

printVarSummary s variveis y1 e y2 para vericar as diferenas.

2.9 Dimenses nomeadas


Para ilustrar o uso de coordenadas na indexao de arranjos foi necessrio dar um nome a dimenso do vetor usado no exemplo. Ou seja, precisou-se nomear a dimenso do vetor (neste caso, obviamente, nica). O smbolo ! usado para se atribuir um nome a (ou obt-lo de) uma dimenso de um arranjo. A numerao das dimenses iniciam da esquerda para direita, com a dimenso mais a esquerda igual a 0. Do exemplo da seo anterior, vamos dar nomes s dimenses do arranjo bidimensional y : y!0 = "lat" y!1 = "lon" Note que o nome uma string de caracteres e, portanto, deve ser informado entre aspas duplas.

2.9.1

Reordenao de dimenses

Uma vez nomeadas as dimenses de um arranjo, possvel mudar as suas posies, ou seja, reorden-las. Continuando no exemplo anterior, vamos alterar a ordem das dimenses do arranjo bidimensional y : y_reorden = y(lon|:,lat|:) Agora, temos uma nova varivel y_reorden com as mesmas dimenses de y, mas com a sua ordem trocada. Isso particularmente til em duas situaes distintas: (i) operaes com arranjos contendo as mesmas dimenses tamanho e quantidade - mas cada um deles em uma ordem diferente e (ii) aplicaes de funes do NCL a uma certa dimenso.

26

Captulo 2. A Linguagem

2.10 Variveis de coordenadas


Pela denio netCDF, uma varivel de coordenada um arranjo unidimensional contendo valores crescentes ou decrescentes monotonicamente que tem o mesmo nome e o mesmo tamanho da dimenso a qual ela atribuda. As variveis de coordenadas representam as coordenadas dos dados para cada ndice em uma dimenso nomeada. Elas podem ser usadas na indexao por coordenadas. O operador & usado para referenciar e atribuir variveis Usando o exemde coordenada. Para atribuir uma varivel de coordenada a uma dimenso, a dimenso deve, em primeiro lugar, possuir um nome. coordenadas j possuem nomes: plo anterior, vamos atribuir coordenadas ao arranjo bidimensional y, cujas

lat = (/-10,-20/) lon = (/-60,-50,-40,-30/) y&lat = lat y&lon = lon

Veja o resultado com a funo

printVarSummary.

2.11 Atributos
Atributos so informaes descritivas que podem estar associadas a uma varivel. Eles so muito teis para comunicar informaes ao usurio a respeito de dados especcos. Juntamente com as coordenadas, formam os metadados de uma varivel. Os atributos de variveis so atribudos e referenciados pelo nome da varivel, seguido do smbolo @ e do nome do atributo. Suponha que o arranjo bidimensional y do exemplo anterior - que j possui coordenadas - contenha dados sobre a umidade relativa de uma certa regio. Vamos passar dois atributos a este arranjo:

y@unidade = "porcentagem (%)" y@data = "21/11/2011"

Passamos atributos que informam a unidade fsica dos dados e a data de coleta.

2.12. _FillValue

27

2.12 _FillValue
O atributo

_FillValue uma atributo reservado do netCDF e do NCL que


Algumas operaes algbricas e grcas tratam o

indica valores ausentes.

_FillValue de maneira especial. Seguindo o exemplo anterior, vamos passar


este atributo ao arranjo bidimensional y :

y@_FillValue = -999

Qualquer elemento de y contendo o valor -999 ser interpretado como dado ausente e no ser usado em operaes matemticas. Veja mais sobre valores ausentes no NCL no Apndice D.

2.13 Coero
Chama-se coero uma converso implcita de dados de um tipo para outro. Isto ocorre quando dois valores de diferentes tipos so operandos de um mesmo operador. Um exemplo simples :

z = 5.2 + 9

Na qual 5.2 do tipo oat, enquanto 9 do tipo integer. Neste caso, 9 silenciosamente convertido ao tipo oat antes da adio. O NCL converter automaticamente quando nenhuma informao perdida. Neste exemplo,

z ser uma varivel do tipo oat. Entretanto, se k do tipo integer e x


do tipo oat (ou do tipo double ), ento a seguinte declarao resulta num erro fatal (nenhuma converso possvel porque h uma possvel perda de informao):

k = x

Quando informao pode ser perdida, funes de converso explcita devem ser usadas:

k =

oattointeger(x)

28

Captulo 2. A Linguagem

2.14 Variveis e metadados


H dois tipos de atribuies em NCL: (i) de valores e (ii) varivel a varivel. Somente a ltima copia os metadados. As atribuies apenas de valores ocorrem quando o lado direito de uma atribuio no uma varivel. O lado direito pode ser uma constante, o resultado de uma expresso ou o resultado do construtor de arranjo

(/.../). Nenhum nome de dimenses, variveis de

coordenadas ou atributos so passados nova varivel, exceto o atributo

_FillValue. Por meio do arranjo bidimensional y, usado at aqui, podemos


testar os dois tipos de atribuio: a = y b = (/y/) A varivel a ser uma cpia exata de y, com seus dados, coordenadas e atributos. Ao contrrio, b conter apenas os dados de y e o atributo _FillValue, no carregando quaisquer atributos e coordenadas. Verique isto aplicando a funo

printVarSummary s variveis a e b.

2.15 Apagando variveis, atributos e coordenadas


A subrotina

delete usada para eliminar variveis, atributos e variveis


Esta subrotina especialmente til

de coordenada. No possvel eliminar variveis de arquivos, atributos de arquivos e coordenadas de arquivos. diferentes da varivel original. Quando uma varivel passada da memria. quando se deseja reutilizar uma varivel, mas os novos valores e/ou tipos so

delete, todos os seus valores so removidos

Se um atributo ou uma varivel de coordenada passada

delete, ele(a) removido(a) da varivel a qual pertence. Os exemplos abaixo


ilustram o seu uso: y = 1 y@teste = "atributo" x = 2 list_vars() integer y [ 1 ]

2.15. Apagando variveis, atributos e coordenadas


teste integer x [ 1 ] delete( y@teste ) list_vars() integer y [ 1 ] integer x [ 1 ] delete( x ) delete( y )

29

Neste exemplo, criamos duas variveis escalares x e y, tendo esta ltima um atributo teste. Usamos aqui outra subrotina, para nos auxiliar a observao do funcionamento de

delete, a subrotina list_vars, que lista as variveis

existentes. Note que na sua primeira execuo, temos a listagem das duas variveis criadas e do atributo de y. Na primeira execuo de

delete, apagamos o atributo de y, como podemos list_vars. Por m, executamos duas vezes

ver aps a segunda execuo de

delete, eliminando as variveis x e y.


possvel, tambm, eliminar mais de uma varivel ao mesmo tempo. Esta capacidade est disponvel a partir da verso 6.0.0-beta do NCL. Veja o exemplo abaixo: y = 1 x = 2 delete( [/ x, y /] )

Note que foi usado uma sintaxe especial, denida por [/ ... /]. Dentro destes limitadores, passa-se uma lista de nomes de variveis - separados por vrgulas - que deseja-se apagar.

30

Captulo 2. A Linguagem

Captulo 3 Arquivos de Entrada/Sada do NCL


3.1 Arquivos Suportados
Os formatos de arquivo conhecidos pela linguagem NCL so chamados de

formatos suportados. So eles: netCDF, HDF, GRIB e CCM History Tape


(somente cray ).

O site

io.shtml
arquivo.

http://www.ncl.ucar.edu/Applications/list_

apresenta algumas informaes adicionais sobre esses formatos de Para importar dados dos arquivos suportados utiliza-se a funo

addle, que possui a seguinte sintaxe:


varivel = addle(caminho e nome do arquivo, status )
O caminho do arquivo pode ser inteiro ou relativo pasta atual. Os arquivos em formatos suportados tem diferentes extenses. Segue abaixo uma lista dos tipos de arquivos suportados e suas respectivas extenses: netCDF HDF4 HDF4-EOS GRIB-1 ou GRIB-2 CCM History Tape (somente cray) .nc ou .cdf .hd ou .hdf hdfeos .grb ou .grib .ccm

1 o formato de arquivo dos modelos climticos globais CCM1, CCM2 e CCM3, escritos
pelo NCAR.

31

32

Captulo 3. Arquivos de Entrada/Sada do NCL

O arquivo de dados no necessita de uma extenso junto ao seu nome. Por exemplo, se existe um arquivo chamado modelo em formato grib, usa-se modelo.grb dentro da funo

addle e o NCL ir procurar primeiro por

um arquivo chamado modelo.grb e em seguida por um arquivo chamado modelo, tratando ele como arquivo em formato grib. O status do arquivo pode ser r para somente leitura, isto , o arquivo no pode ser editado, c para criao de um novo arquivo e w para leitura e edio, ou seja, o arquivo pode ser editado no ncl. Nem todos os formatos de arquivos suportados podem ser criados ou editados: "r" "c" "w" leitura - todos os formatos suportados criao - somente netCDF e HDF4 leitura e edio - somente netCDF e HDF4

Supondo que exista o arquivo analise.nc (arquivo em formato netCDF), usado para a visualizao de mapas, dentro da pasta dados. Pode-se importar este arquivo da seguinte forma: abrir = addle("dados/analise.nc","r") Igualmente, caso a inteno seja criar um novo arquivo chamado analise no formato netCDF, na pasta dados, pode-se fazer da seguinte forma: abrir = addle("dados/analise.nc","c") A partir da, a referncia ao arquivo sempre dada pela palavra abrir, que aponta para a abertura do arquivo. Para importar uma varivel dentro de um arquivo de qualquer um dos formatos suportados, usam-se os caracteres

->. Primeiramente, necessrio conhecer o nome da varivel dentro deste


arquivo. Por exemplo, a varivel temperatura em superfcie pode ter o nome

tmp ou tmpsup ou tmp2m, conforme escrito pelo criador do arquivo. Considerando que dentro do arquivo referenciado pela palavra abrir, a temperatura em superfcie chamada de tmp2m, pode-se importar os dados desta varivel da seguinte forma: temperatura = abrir->tmp2m Assim, a palavra temperatura a referncia varivel tmp2m dentro do arquivo dados/analise.nc. Caso o nome da varivel seja escrito com algum erro, a palavra temperatura no encontra a varivel dentro do arquivo e no recebe valor algum.

Quando usar o

$:

3.1. Arquivos Suportados

33

Em alguns casos, o nome da varivel deve estar rodeado pelo smbolo $. Isso necessrio se a varivel no arquivo tem um caracter no-alfanumrico (por exemplo + ou - dentro dele) ou ento se o tem do lado direito do apontador

-> ele prprio uma varivel do tipo string. Por exemplo, se um

arquivo possui a varivel tmp+2m-obs com informaes de temperatura em 2 metros, usa-se o formato com o smbolo $ (devido aos sinais + e -): temperatura = abrir->$tmp+2m-obs$ No segundo exemplo, as letras T, U e V formam uma varivel do tipo

string, portanto tambm usa-se o formato com o smbolo $ :


vars = (/"T","U","V"/) variaveis = abrir->$vars(n)$ ;n=0,1,2,3

Imprimindo o contedo de um arquivo em formato suportado:


A funo

print pode ser usada para visualizar o contedo de qualquer arquivo

em formato suportado. A informao visualizada similar quela mostrada pelo aplicativo netCDF/Unidata utilizando o comando ncdump -h nome-

doarquivo.nc .

Ento, tendo o arquivo gfs00.grib2, pode-se visualizar as

informaes que esto contidas nele com o comando: abrir = addle("gfs00.grib2","r") print(abrir) Informaes como nome do arquivo, dimenses (graus de latitude e longitude, nveis verticais...), variveis (tipo, nome, unidade, centro de origem, nvel...) so mostradas na tela. Essa uma ferramenta til para se identicar quais as variveis e seus nomes dentro do arquivo.

Reordenando uma varivel na entrada:


Assumindo que TMP uma varivel 3D de tamanho (ntempo,nlat,nlon). Para inverter a latitude da matriz: temperatura = abrir -> TMP (:,::-1,:)

Importando dado do tipo byte ou short:


Um grupo de funes, escritas por usurios do NCL, distribuda junto com a instalao do programa. Vrias funes nesta biblioteca convertem variveis do tipo short e byte para oat. Por exemplo:

34

Captulo 3. Arquivos de Entrada/Sada do NCL


temperatura = short2t(abrir->TMP) temperatura = byte2t(abrir->TMP)

No primeiro exemplo a varivel TMP originalmente do tipo short, porm temperatura do tipo oat. Semelhantemente, no segundo exemplo a varivel

TMP originalmente do tipo byte, mas temperatura do tipo oat. Antes


de usar essas funes, necessrio carregar a biblioteca das contribuies, colocando a linha abaixo:

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"

3.1.1

Abrangendo mltiplos arquivos:

A funo

addles permite o acesso de dados de mltiplos arquivos. Essa

funo pode concatenar registros e tambm agrupar variveis de diferentes arquivos adicionando uma dimenso extra. Pode-se agrupar, por exemplo, arquivos de uma mesma rodada e horrios de previso diferentes. Neste caso, til usar a funo

systemfunc em conjunto, para listar todos os arquivos de


gfsprevisao00.grb, gfsprevisao06.grb,

dados antes de abri-los. Supondo que os arquivos de uma determinada rodada do modelo gfs tenham os nomes: gfsprevisao12.grb e assim por diante. Para abri-los em conjunto e extrair a varivel temperatura em 2 metros (TMP2M ), pode-se usar os seguintes comandos:

arquivos = systemfunc("ls gfsprevisao*.grb") abrir = addles(arquivos,"r") temperatura = abrir[:]->TMP2M

Neste exemplo, a varivel resultante temperatura agrupa as previses de todos os horrios do modelo gfs, mesmo que originalmente estejam em arquivos diferentes.

O procedimento

setleoption pode ser usado para alterar aspectos do comaddle e addles. Para mais informaes consulte

portamento das funes

http://www.ncl.ucar.edu/Document/ Functions/Built-in/setfileoptions.shtml.
a pgina de documentao do ncl:

3.2. Arquivos de Dados Binrios

35

3.2 Arquivos de Dados Binrios


Dados binrios no so necessariamente portteis. A maior parte das mquinas escrevem binrios IEEE. Uma exceo notvel o binrio nativo CRAY. At mesmo binrios IEEE no so necessariamente portteis. Os binrios IEEE so de duas formas diferentes: big endian e little endian. Dependendo da mquina, um arquivo binrio pode ter que reordenar os bytes (byte swap ). O NCL permite reordenamento de bytes dinmico via procedimento

setle-

option.
Pode ser til abrir ou escrever arquivo binrio no formato Fortran sequencial no formatado, que um arquivo semelhante quele criado no Fortran com FORMAT=UNFORMATTED e ACCESS=SEQUENTIAL(padro). Arquivos com acesso sequential contm cabealho com informaes de tamanho de registro, j arquivos com acesso direct no contm informaes de tamanho de registro em seu cabealho.

3.2.1

Lendo arquivos binrios:

Vrias funes lem dados de arquivos binrios. A maior parte l binrios IEEE e vrios lem binrios CRAY. A funo

fbinrecread pode ser usada para leitura de um arquivo Fortran

sequencial no-formatado. Os registros, que comeam com 0, podem ser de vrios tipos e tamanhos. Sintaxe:

varivel = fbinrecread(caminho do arquivo, nmero do registro, dimenses, tipo )


Por exemplo, para ler o registro 0 de um arquivo com o nome arquivo.ieee: abrir = fbinrecread("arquivo.ieee", 0, (/64,128/), "oat") A funo

fbindirread pode ser usada para leitura de registros binrios de

tamanho de registro xo (acesso direto). Todos os registros do arquivo devem ser do mesmo tipo e dimenso. Sintaxe:

varivel = fbindirread(caminho do arquivo, nmero do registro, dimenses, tipo )

36

Captulo 3. Arquivos de Entrada/Sada do NCL

Por exemplo, para ler o registro (n+1) do arquivo arquivo.ieee: abrir = fbindirread("arquivo.ieee",n,(/73,144/),"oat") Outras funes para a leitura de dados binrios incluem:

cbinread, fbin-

read e craybinrecread.

3.2.2

Escrevendo arquivos binrios:

Vrios procedimentos escrevem arquivos IEEE de dados binrios. A funo

fbinrecwrite pode ser usada para escrever um arquivo Fortran

sequencial no formatado. Sintaxe:

varivel = fbinrecwrite(caminho do arquivo, nmero do registro, valor )

Os registros podem ser de vrios tipos e tamanhos. Por exemplo, assumindo que existem as cinco variveis tempo(ntime), lat(nlat), lon(nlon), y(ntime,

nlat, nlon) e z(nlat, nlon) (note que usando -1 como nmero de registro
signica adicionar): fbinrecwrite("nomedoarquivo.ieee",-1,tempo) fbinrecwrite("nomedoarquivo.ieee",-1,lat) fbinrecwrite("nomedoarquivo.ieee",-1,lon) fbinrecwrite("nomedoarquivo.ieee",-1,y) fbinrecwrite("nomedoarquivo.ieee",-1,z) A funo

fbindirwrite pode ser usada para escrever um arquivo Fortran de

acesso direto (ACCESS=DIRECT) no formatado. Todos os registros devem ser do mesmo tamanho e tipo. Se o arquivo j existir, o valor ser adicionado queles j existentes no arquivo. Sintaxe:

varivel = fbindirwrite(caminho do arquivo, valor )


Por exemplo, para criar um arquivo Fortran de acesso direto no formatado com 100 registros e nome samp.dat: nmaximo=100 do x=0,nmaximo-1

3.3. Arquivos de Dados ASCII


fbindirwrite("/meu/diretorio/samp.dat",x) end do

37

DICA: Esse semelhante ao exemplo 3 do guia do usurio do Grads (http:

//www.iges.org/grads/gadoc/aboutgriddeddata.html#create)

para

criao de um arquivo Fortran de acesso direto no formatado com 100 registros. Verique o site e compare as duas formas de criao deste tipo de arquivo.

Outros procedimentos para a leitura de dados binrios IEEE incluem:

cbin-

write e fbinwrite. Lendo e escrevendo arquivos

big endian

little endian :

No NCL, o comportamento padro das funes de leitura/escrita dos binrios e procedimentos so de assumir que os arquivos so compatveis com o tipo

endian para o sistema. O procedimento setleoption pode ser usado para


executar dinamicamente byte swapping, se necessrio.

3.3 Arquivos de Dados ASCII


muito comum dados meteorolgicos, especialmente aqueles advindos de estaes meteorolgicas e radiossondagens, estarem disponveis em arquivos ASCII. Arquivos ASCII so arquivos em texto puro, sem qualquer formatao e abertos por editores de texto simples como o Bloco de notas, no Windows, e gedit, no Linux, por exemplo. Como estes arquivos no seguem um padro no modo em que os dados so organizados, como ocorre com os arquivos em formato suportado diretamente pelo NCL (netCDF, HDF, GRIB ou CCM), os arquivos ASCII no podem ser abertos com a funo

addle. Entretanto,

o NCL dispe de funes de leitura e escrita de arquivos ASCII, mas deixa sob a responsabilidade do usurio a organizao dos dados em uma maneira que possibilite a sua utilizao.

38
3.3.1

Captulo 3. Arquivos de Entrada/Sada do NCL


Abrindo arquivos ASCII

Os arquivos em formato ASCII (arquivo texto) so abertos com a funo

asciiread, cuja sintaxe bsica


varivel = asciiread(caminho do arquivo, dimenso, tipo )
sendo dimenso que indica o nmero de linhas e colunas dos dados. Podese passar o valor -1 como dimenso dos dados. Neste caso, a varivel que conter os dados ser um arranjo unidimensional (vetor), cujo tamanho o nmero total de dados contidos no arquivo ASCII. J o tipo especica que tipo de dado ser lido, ou seja, se string, oat ou integer. Para ilustrar a abertura de arquivos ASCII vamos supor que h um arquivo chamado dados.txt, contendo uma matriz com 3 linhas e 3 colunas, como mostrado abaixo: 12 24 28 9 12 14 3 6 7

Podemos carregar os dados deste arquivo com a seguinte linha de comando: matriz = asciiread( "dados.txt", (/3,3/), "integer") Esta linha criar um arranjo bidimensional do tipo inteiro contendo 3 linhas e 3 colunas com o nome matriz. Podemos ler o mesmo arquivo usando -1 para a dimenso, cando como: dados = asciiread( "dados.txt", -1, "integer") Agora, como no passamos nenhuma informao a respeito do nmero de linhas e colunas, os dados sero lidos e atribudos em um arranjo unidimensional. inteiros. Neste exemplo, a varivel dados ser um vetor contendo 9 valores

3.3.2

Escrevendo arquivos ASCII:

A subrotina rivel.

asciiwrite cria um arquivo ASCII com o contedo de uma vaasciiwrite, ela criar um arquivo ASCII contendo um

Independente do nmero e do tamanho das dimenses da varivel

passada subrotina

vetor de informaes, ou seja, inmeras linhas de dados contendo apenas uma

3.3. Arquivos de Dados ASCII

39

coluna de valores. Em outras palavras, no possvel controlar a formatao do arquivo ASCII ao se utilizar esta subrotina. arquivo chamado copia_dados.txt. comando: asciiwrite("copia_dados.txt",matriz) O arquivo copia_dados.txt conter uma nica coluna de dados: 12 9 3 24 12 6 28 14 7 J a subrotina Imagine que queremos escrever o contedo do arranjo bidimensional matriz apresentado acima, num Para tal, usa-se a seguinte linha de

write_matrix pode escrever mltiplas colunas em um forDessa forma, pode-se escrever valores em

mato que pode ser controlado. chamado copia2_dados.txt: opcoes = True

vrias colunas. Vamos escrever o contedo da varivel matriz num arquivo

opcoes@fout = "copia2_dados.txt" write_matrix( matriz, "3i5", opcoes ) Neste caso, o arquivo copia2_dados.txt ser uma cpia exata do arquivo dados.txt denido no incio desta seo. passado subrotina varivel opcoes. Note que o nome do arquivo

write_matrix por um atributo, fout, que passado

Caso esta varivel possusse um valor igual a False, a

subrotina imprimiria a matriz na tela. A formatao do arquivo denida no segundo argumento da subrotina

write_matrix, que denida como 3i5.

Esta formatao segue a no-

tao do Fortran. O leitor convidado a visitar o site ocial do NCL para conhecer as outras formas de formatao e/ou consultar bibliograas sobre Fortran. Neste exemplo, o primeiro caracter da formatao dene o nmero de colunas - 3 colunas - o segundo caracter dene o tipo de dado - inteiro (integer) - e o terceiro o tamanho da cada coluna de dada - 5 dgitos. Assim, cada linha do arquivo copia2_dados.txt ter a forma:

40
aaaaabbbbbccccc

Captulo 3. Arquivos de Entrada/Sada do NCL

sendo aaaaa o primeiro conjunto (coluna) de 5 dgitos, bbbbb o segundo conjunto (coluna) de 5 dgitos e ccccc o ltimo conjunto de 5 dgitos, formando os trs conjuntos de valores inteiros.

3.4 Escrevendo arquivos netCDF/HDF


Os arquivos escritos em formato netCDF so mais portteis que arquivos do tipo ASCII, ou seja, conseguem armazenar maior quantidade de dados em menos espao de mquina. Por isso, vlido criar arquivos em formato netCDF para guardar grandes quantidades de dados meteorolgicos. O NCL tem duas abordagens de criao de arquivos netCDF (ou HDF). O primeiro mtodo chamado de

mtodo simples enquanto que o segundo segue o

mtodo tradicional de predenio explcita do contedo do arquivo antes


de escrever qualquer valor dentro dele.

Mtodo simples:
Esse mtodo direto (pode-se substituir .hdf  por .nc para criar um arquivo HDF). Por exemplo: abrir = addle("nomedoarquivo.nc","c") abrir->TMP2M = temperatura abrir->UWIND = ventozonal Para criar uma dimenso ilimitada, que normalmente o tempo, necessrio adicionar a linha de cdigo abaixo antes de escrever qualquer valor: ledimdef(abrir,"time",-1,True)

Mtodo Tradicional
Em alguns casos, o

mtodo simples de criao de arquivo netCDF muito


O

lento, particularmente se existem muitas variveis ou a sada resultante do arquivo muito extensa.

mtodo tradicional mais eciente.

Esse

mtodo requer que o usurio dena explicitamente o contedo do arquivo de entrada, antes de escrev-lo. As funes do NCL que predenem um arquivo netCDF:

levardef: dene o nome de uma ou mais variveis;

3.4. Escrevendo arquivos netCDF/HDF

41

levarattdef: copia os atributos de uma varivel para uma ou mais variveis; ledimdef: dene dimenses, inclusive dimenses ilimitadas; leattdev: copia os atributos de uma varivel para um arquivo com atributos globais;

setleoption: algumas opes podem melhorar dramaticamente o desempenho da criao do arquivo. Para exemplicar, assume-se que as variveis time, lat, lon e T esto em memria. Para escrever um arquivo chamado saida.nc, em que a varivel

T recebe o nome TMP :


abrir = addle("saida.nc","c") ;Cria os atributos globais: leAtt = True leAtt@title = "Exemplo de arquivo" leAtt@Conventions = "None" leAtt@creation_date = systemfunc("date") leAttdef(abrir,leAtt) ;Predene as coordenadas das variveis: ;-1 signica que a dimenso ilimitada (pode crescer) dimNames = (/"time","lat","lon"/) dimSizes = (/-1,nlat,nlon/) dimUnlim = (/True,False,False/) ;Predene nomes, tipos e dimenses: ledimdef(abrir,dimNames,dimSizes,dimUnlim) levardef(abrir,"time",typeof(time),getvardims(time)) levardef(abrir,"lat",typeof(lat),"lat") levardef(abrir,"lon","oat","lon") levardef(abrir,"TMP",typeof(T),getvardims(T)) ;Predene cada atributo de varivel: levarattdef(abrir,"time",time) levarattdef(abrir,"lat",lat) levarattdef(abrir,"lon",lon) levarattdef(abrir,"TMP",T) ;Escreve os valores somente: ;trocando o nome da varivel de T para TMP abrir->time = (/time/)

42
abrir->lat = (/lat/) abrir->lon = (/lon/) abrir->TMP = (/T/)

Captulo 3. Arquivos de Entrada/Sada do NCL

3.4.1

Escrevendo escalares em netCDF:

Tanto no mtodo simples como no mtodo tradicional, o NCL reserva o nome

ncl_scalar para identicar valores escalares que devem ser escritos em um


arquivo netCDF. No mtodo simples: abrir = addle("nome_simples.nc","c") con = 5 con!0 = "ncl_scalar" abrir->constant = con No mtodo tradicional: re = 6.37122e06 re@long_name = "radius of earth" re@units = "m" abrir = addle("nome_tradicional.nc","c") levardef(abrir,"re",typeof(re),"ncl_scalar") levarattdef(abrir,"re",re) abrir->re = (/re/)

Contedo de um arquivo netCDF/HDF bem escrito:


Os atributos globais do arquivo, como ttulo, conveno e fonte, devem ser includos em todos os arquivos. Outros atributos adicionais podem ser includos como histria e referncias.

Conveno de linha de comando dos formatos suportados para netCDF:


O NCL tem um utilitrio de linha de comando chamado

ncl_convert2nc,

que converte qualquer arquivo em formato suportado (GRIB-1, GRIB-2, HDF4, HDF4-EOS) para netCDF. Mais detalhes na pgina de documentao:

http://www.ncl.ucar.edu/Document/Tools/ncl_convert2nc.shtml.

3.5. Acesso arquivos remotos: OPenDAP

43

3.5 Acesso arquivos remotos: OPenDAP


Alguns servidores de dados permitem acesso remoto de dados via (Open Source Project for Network Data Access Protocol). uma URL que est rodando um servidor

OPenDAP

O acesso via

OPeNDAP pelo NCL est disponvel em alguns sistemas operacionais, via OPeNDAP:

abrir = addle ("http://pasta/nome.nc","r") varios = "http://pasta/"+(/"nome1.nc","nome2.nc","nome3.nc"/) abrirvarios = addles(varios,"r") O usurio pode testar a disponibilidade do arquivo usando dados remotos. Alm disso, alguns servidores

islepresent.

Note que o usurio pode ser bloqueado por um rewall, no tendo acesso aos

OPeNDAP requerem registro,

com usurio e senha cadastrado, antes de liberar o acesso aos dados.

44

Captulo 3. Arquivos de Entrada/Sada do NCL

Captulo 4 Impresso
O NCL fornece capacidade de impresso limitada, em alguns casos, se obtm melhor formatao com o Fortran ou C. Funes de impresso so teis para exibir contedos de variveis e suas caractersticas e na tarefa de depurao de um script, ou seja, na procura de falhas e mal funcionamento. As funes e as subrotinas de impresso incluem:

printVarSummary printFileVarSummary print sprinti,sprintf write_matrix

Fornece um resumo de uma varivel, incluindo todos os metadados. Fornece um resumo de uma varivel associada a um arquivo (presente a partir da verso 6.0.0 do NCL). Fornece as mesmas informaes que a funo Oferece controle (limitado) sobre formato. Imprime os dados na forma tabular.

printVar-

Summary, seguidas pelos valores para cada elemento.

4.1 printVarSummary
Esta subrotina exibe as informaes associadas com uma varivel. Estas informaes incluem tipo, atributos, tamanho de dimenses e seus nomes (se existentes) e um resumo dos dados de coordenadas (se houver). frequentemente usado quando se deseja alguma informao da varivel sem a necessidade de impresso de todos os dados. O exemplo abaixo ilustra o uso desta subrotina:

45

46
x=10 printVarSummary(x) y=(/1,2,3,4,5/) printVarSummary(y) z=(/ (/1,2/), (/3,4/) /) printVarSummary(z)

Captulo 4. Impresso

A primeira execuo desta subrotina imprimir na tela as informaes a respeito da varivel escalar x, a segunda sobre o arranjo unidimensional (vetor)

y e a terceira imprimir informaes sobre o arranjo bidimensional z.


a terceira execuo apresentada acima: Variable: z Type: integer Total size: 16 bytes 4 values Number of Dimensions: 2 Dimensions and sizes: [2] x [2] Coordinates:

As

linhas abaixo mostram um resultado tpico desta subrotina, neste caso, para

4.2 print
Esta subrotina exibe as informaes de uma varivel e o seu contedo quando o seu argumento uma varivel - ou simplesmente exibe os seus valores - quando o seu argumento o resultado de uma expresso ou um valor literal. Para variveis do tipo byte, a subrotina

print exibir os seus valores

no sistema octal. Ela aceita a indexao padro e por coordenadas para se referir a partes especcas de um arranjo. Nenhum controle de formato est disponvel. Por denio, esta subrotina imprime os valores de uma varivel precedidos pelo seu ndice na varivel. Escalares so precedidos por (0). Quando executado nas linhas de comando do NCL (em modo interativo) e o contedo a ser exibido mais extenso que o permitido pela tela, a subrotina permite avanar manualmente (como o comando more do Linux).

4.3. sprintf e sprinti

47

Os exemplos abaixos mostram resultados tpicos gerados a partir desta subrotina;

Exemplo 1:
p=ispan(1,4,1) print(p) Variable: p Type: integer Total Size: 16 bytes 4 values Number of Dimensions: 1 Dimensions and Sizes: [4] Coordinates: (0) 1 (1) 2 (2) 3 (3) 4

Exemplo 2:
u=(/-53.8125,-25.4589,67.3408,98.2367,75.4578/) print("min(u)="+min(u)+"max(u)="+max(u)) (0) min(u)=-53.8125 max(u)=98.2367

4.3 sprintf e sprinti


Estas funes usam uma string de caracteres que denem uma formatao para os dados a serem impressos. similar a verso da linguagem C, mas possui duas diferenas importantes: (1) somente o operador % permitido neste string de caracteres e (2) somente nmeros inteiros (sprinti) e em ponto utuante (sprintf ) so permitidos. As linhas abaixo ilustram o uso destas funes:

Exemplo 1:
x = 23456789 print( sprintf("%6.4f", x) )

48
(0) 23456788.0000 print( sprintf("%6.4e", x) ) (0) 2.3457e+07 print( sprintf("%6.4E", x) ) (0) 2.3457E+07 print( sprintf("%6.4g", x) ) (0) 2.346e+07 print( sprintf("%6.4G", x) ) (0) 2.346E+07

Captulo 4. Impresso

Exemplo 2:
u=(/-53.8125,-62.9860,45.6590,55.2759/) print("min(u)="+sprintf("%5.2f",min(u))) (0) min(u) = -62.98

Exemplo 3:
ii=(/-47,3579,24680/) print(sprinti("%+7.5i",ii)) (0) -00047 (1) +03579 (2) +24680

Abaixo explicado brevemente como construir uma string de caracteres de formatao para a funo

sprintf :

1. Cada especicao de converso (string de formatao) comea com um % e termina com um caractere de converso: f, e/E, g/G. 2. Entre o % e o caractere de converso, pode haver, na seguinte ordem:

Um sinal de menos, que especica um ajuste esquerda do argumento (valor) convertido. Um nmero que determina a largura mnima do campo (resultado da funo). O argumento convertido ser impresso em um campo com esta largura, no mnimo, podendo ser preenchido se necessrio.

Um ponto, que separa a largura do campo de sua preciso. Um nmero que determina a preciso, ou seja, o nmero de dgitos aps a vrgula de um valor em ponto utuante.

4.4. write_matrix
3. Os caracteres de converso so:

49

f: [-]m.dddddd, sendo o nmero de d's dado pela preciso (padro: 6) e[,E]: [-]m.dddddd exx ou [-]m.dddddd Exx, sendo o nmero de d's dado pela preciso (padro: 6) g[,G]: use %e ou %E se o expoente menor que -4 ou maior ou igual preciso. Ao contrrio, use %f.

Os exemplos acima apresentados ilustram a aplicao destas regras.

4.4 write_matrix
A subrotina

write_matrix fornece a habilidade de imprimir tabelas a partir

de arranjos bidimensionais que podem ser direcionadas para a tela ou para um arquivo. No possvel imprimir colunas e linhas individuais de texto, que sirvam como cabealhos tabela impressa. A formatao da tabela feita por meio de descritores de edio do Fortran. Procure por textos sobre o Fortran para descries mais completas. Abaixo, uma breve explicao dada, sendo w referente ao tamanho total de cada valor, que deve levar em conta o sinal de menos:

Para valores inteiros possvel usar Iw/iw ou Iw.m/iw.m. Para valores em ponto utuante, os seguintes descritores de edio podem ser usados: Fw.d/fw.d, Ew.d/ew.d, Dw.d e Gw.d/gw.d, sendo d o nmero de dgitos usados para a parte fracionria do valor.

Todos os descritores podem ser precedidos por um valor inteiro que indica o nmero de vezes que o descritor deve ser repetido em uma linha. Por exemplo, 9f12.5 signica repetir o descritor f12.5 nove vezes. Eles tambm podem ser combinados, possibilitando que diferentes combinaes de valores possam ser enviados tela ou a um arquivo. As linhas abaixo ilustram o uso desta subrotina, inclusive comparando-o com a subrotina

print:

50
x=(/ (/1,2/), (/3,4/) /) write_matrix(x, "2i2", False) que resulta na seguinte sada na tela: 1 3 2 4

Captulo 4. Impresso

diferentemente, a subrotina print(x) Variable: x Type: integer Total Size: 16 bytes 4 values

print imprime um elemento aps o outro:

Number of Dimensions: 2 Dimensions and sizes: [2] x [2] Coordinates: (0,0) 1 (0,1) 2 (1,0) 3 (1,1) 4 Se a inteno fosse guardar os dados de x em um arquivo ASCII, em sua forma tabular, devemos passar uma varivel do tipo logical ao terceiro argumento da subrotina

write_matrix contendo o atributo fout, como ilustrado nas

linhas abaixo: x=(/ (/1,2/), (/3,4/) /) saida = True saida@fout = "arquivo_dados.txt" write_matrix(x, "2i2", saida) No diretrio atual ser criado um arquivo chamado arquivo_dados.txt contendo os valores presentes em x.

Captulo 5 Anlise de Dados


O NCL oferece diferentes abordagens para anlise de dados: (1) sintaxe de arranjos ,(2) centenas de funes internas, (3) funes disponibilizadas por usurios e (4) rotinas em linguagem Fortran ou C. Dicas sobre codicao ecientes podem ser encontradas em:

htt://www.ncl.ucar.edu/Document/Manuals/Ref_Manual/NclUsage.shtml

5.1 Sintaxe de arranjos


A lgebra do NCL, como no Fortran 90, suporta operaes sobre escalares e matrizes, ao invs de apenas entre escalares, como nas linguagens C, C++ e PASCAL. Para trabalhar com operaes matricias, ambos os operandos devem ter o mesmo nmero de dimenses que, por sua vez, devem ter o mesmo tamanho. Alm disso, os tipos de dados de cada operando devem ser equivalentes ou um operando deve ser coercvel ao tipo do outro operando. Por exemplo, supondo que A e B sejam arranjos com mesmo nmero e tamanho de dimenses: C=A+B D=A-B E=A*B ;adio elemento por elemento ;subtrao elemento por elemento ;multiplicao elemento por elemento

nas quais C, D e E sero automaticamente criados se no existiam anteriormente. Estes novos arranjos tero o mesmo nmero e tamanho de dimenses

51

52
dos arranjos A e B.

Captulo 5. Anlise de Dados

Exemplo 1:
A=(/10,20,30,40,50,60/) B=(/60,50,40,30,20,10/) C=A+B D=A-B E=A*B print(C) print(D) print(E) Resulta em:

C =(70,70,70,70,70,70) D =(-50,-30,-10,10,30,50) E =(600,100,1200,100,600)


Os valores escalares so casos especiais, quando consideramos operaes com matrizes. Quando um valor escalar aparece em uma expresso com um valor multi-dimensional (i.e., uma matriz), o valor escalar aplicado a cada elemento da matriz. Por exemplo, considerando que E uma matriz de n linhas e m colunas, a seguinte operao

F= 2*E+5
far com que cada elemento da matriz E seja multiplicado por 2 e em seguida

5 ser adicionado a cada elemento. O resultado ser atribudo a F, que ter


as mesmas n linhas e m colunas de E.

Exemplo 2:
E=(/11,22,33,44,55,66/) F=2*E+5 print(F) Resulta em:

F =(27,49,71,93,115,137)

Os operadores < e > do NCL no so comumente usados em outras linguagens (s vezes chamados de operadores de recortes). O uso destes operadores ilustrado no exemplo abaixo:

5.2. Conformao da matriz


x=(/ (/1,2/), (/3,4/) /) y = x > 3 print(y) Variable: y Type: integer Total Size: 16 bytes 4 values Number of Dimensions: 2 Dimensions and sizes: [2] x [2] Coordinates: (0,0) 3 (0,1) 3 (1,0) 3 (1,1) 4

53

Signica que qualquer valor de x superior a 3 ser substitudo por este ltimo. Todas as expresses envolvendo arranjos automaticamente ignoram qualquer operao que envolva valores denidos para

_FillValue.

5.2 Conformao da matriz


Expresses com arranjos exigem que todos os operandos tenham o mesmo nmero de dimenses e dimenses com mesmo tamanho. Valores escalares possuem conformao a qualquer arranjo. O exemplo abaixo ilustra isto T=(/10,30,64,128/) P=(/54,1,21,2/) theta =

T + (5 P )

print(theta) sendo T e P so vetores de mesmo tamanho e, logo, theta possuir os seguintes valores (104,151,341,642), tendo o mesmo nmero de elementos de T e P.

As funes

conform e conform_dims podem ser usadas adaptar a forma

de um arranjo a outro com diferentes dimenses e tamanhos de dimenses: T=new((/5,3/),oat) P=new((/3/),oat)

54
P=(/1000,850,700/) T=5. Pconform=conform(T,P,1)

Captulo 5. Anlise de Dados

A funo

conform expande P a um arranjo bidimensional igual a T. Note que

preciso informar qual dimenso de T tem o mesmo tamanho de P, que neste caso corresponde a dimenso 1 (segunda dimenso) de T. Para mais detalhes veja:

http://ncl.ucar.edu/Document/Functions/Built-in/conform. shtml e http://ncl.ucar.edu/Document/Functions/Built-in/conform_ dims.shtml.

5.3 Alocao de memria com arranjos


Memria pode ser explicitamente reservada ou criada para arranjos de duas formas diferentes:

1. Com o construtor de matriz (/.../): a_integer a_oat a_double a_string a_logical a_2darray 2. Com a funo = = = = = = (/1.0, 2.0, 3.0/) (/1.0, 2.0, 3.0/) (/4d0,5d-5,1d30/) (/a,b,c/) (/True, False ,True/) (/ (/1,2/) , (/5,6/) , (/8,9/) /)

new(tamaho_arranjo,formato,tipo,[_FillValue ]): A in-

cluso de _FillValue opcional e caso ele no estiver presente, ser atribudo o valor padro (ver Apndice D). Especicando  No_FillValue nenhum _FillValue padro ser atribudo. Veja os exemplos abaixo: a=new(3,oat) b=new(10,oat,1e20) c=new((/5,6,7/),integer) d=new( dimsizes(U)), double) e=new( dimsizes(ndtooned(U)),logical) s=new(100,string) q=new(3,oat,No_FillValue ) ; ; ; ; ; ; ; 999. 1e20 999 9999 -1 missing" nenhum_FillValue

A memria automaticamente criada por funes de variveis retornveis, assim, a utilizao de

new muitas vezes no necessria ou recomendada.

5.4. Funes e subrotinas

55

5.4 Funes e subrotinas


Como a maioria das linguagens, o NCL possui funes e subrotinas. diferenas entre elas que os usurios devem estar cientes: H

1. Funes so pores de cdigos na linguagem NCL que retornam um ou mais valores e podem ser usadas como parte de uma expresso. Por exemplo,

max, sin e exp so funes matemticas que retornam o

valor mximo, o seno e o exponencial do argumento passado a elas. O exemplo seguinte ilusta o uso de funes em expresses matemticas z=

exp ( sin(max (q) ) ) + 12.345

Funes no so obrigadas a devolver o mesmo tipo e tamanho de matriz cada vez que eles so chamados. 2. Subrotinas (anlogas a subrotinas do Fortran) no podem fazer parte de uma expresso, porque eles no retornam valores. As subrotinas do NCL so usadas de forma semelhante s utilizadas em outras linguagens de programao. Elas executam uma tarefa especca e/ou so usadas para modicar um ou mais dos argumentos de entrada.

Argumentos, procedimentos e funes para o NCL


Os argumentos so passados s funes e subrotinas por referncia. Isso

signica que mudanas em seus valores, atributos, nomes de dimenso e coordenadas das variveis dentro de uma funo ou procedimento ir provocar uma mudana em seus valores no programa principal. Por conveno, ento, os argumentos para as funes no devem ser alterados por uma funo, embora isso no seja necessrio. Na discusso a seguir, ser assumido que os argumentos para funes seguem esta conveno.

Prottipo de um argumento
Em NCL os argumentos de uma funo e subrotinas podem ser especicados para serem muito restritos e requerem um tipo especco, nmero de dimenses e um tamanho para cada dimenso. Eles podem no ter restries de tipo ou dimenso. A estas especicaes de argumento chama-se de prottipo de argumento.

1. Especicao restrita de argumentos signica que os argumentos so obrigados a ter um determinado tipo, tamanho e forma de dimenso:

56

Captulo 5. Anlise de Dados


procedure ex (x[*][*]:oat, y[2]: byte,res : logical, text :string)
O argumento x deve ser um arranjo bidimensional do tipo do tipo

oat, y deve

ser um arranjo unidimensional de comprimento 2 ,res e text devem ser

logical e string respectivamente, mas podem ser de qualquer

dimensionalidade. 2. Tipo genrico de prototipagem: nico tipo

function xy_interp (x : numeric ,y : numeric)


Aqui

numeric qualquer tipo de dado numrico indicado.

3. Sem tipo, sem tamanho, sem especicao de forma tridimensional:

procedure foo (a,b,c)


4. Combinao:

function ex (d[*] :oat,x : numeric, wks : graphic , y[2],a )

Uma caracterstica muito importante que os usurios devem estar cientes quanto a passagem de argumentos para subrotinas. Isto um problema apenas quando espera-se que a subrotina modique os argumentos de entrada. Quando um argumento de entrada deve ser forado para o tipo correto da subrotina, o NCL no capaz de transformar os dados na direo inversa, de modo que o argumento no afetado pelas alteraes feitas no mbito da subrotina. O NCL gera uma mensagem de aviso, uma mensagem WARNING.

Captulo 6 Linhas de comando


O NCL suporta um numero limitado de opes e denies, alm da denio e execuo de comandos simples do NCL ainda no terminal do Linux, independendo do modo de uso do NCL: interativo ou em lote. Maiores detalhes e exemplos so apresentados descritos no site ocial do NCL:

//www.ncl.ucar.edu/Document/Manuals/RefManual/NclCLO.shtml.

http:

6.1 Alterando o comportamento do NCL


Ao executar o NCL no terminal do Linux possvel passar opes que alteram o seu comportamento. So elas: -h -n -x -V Uma ajuda rpida, mostra as opes disponveis. No enumera os valores na impressos com a subrotina

print.
Repete os comandos do NCL usados no modo interativo. Apenas mostra a verso do NCL.

Um exemplo simples usando a funo -x : $ ncl -x Copyright (C) 1995-2011 - All Rights Reserved University Corporation for Atmospheric Research NCAR Command Language Version 6.0.0 The use of this software is governed by a License Agreement. See http://www.ncl.ucar.edu/ for more details.

57

58
ncl 0> a = 5 + a = 5 ncl 1> exit + exit

Captulo 6. Linhas de comando

Note que a primeira linha refere-se ao terminal do Linux, no qual executa-se o NCL com a opo -x. Alm disso, devido ao uso desta opo, cada linha digitada no NCL repetida logo abaixo.

6.2 Especicando atribuies de varivel na linha de comando


Criar variveis na linha de comando quando o NCL executado pode facilitar as tarefas de processamento de dados. Espaos no so permitidos. Declaraes contendo sequncias devem ser colocadas entre aspas simples. O script pode conter congurao padro para variveis que so opcionais. Veja alguns exemplos: $ ncl c=5 Copyright (C) 1995-2011 - All Rights Reserved University Corporation for Atmospheric Research NCAR Command Language Version 6.0.0 The use of this software is governed by a License Agreement. See http://www.ncl.ucar.edu/ for more details. ncl 0> if(c.gt.0) then ncl 1> print("c eh maior que zero") ncl 2> else ncl 3> print("c eh menor ou igual a zero") ncl 4> end if (0) c eh maior que zero Veja que foi criada uma varivel c cujo valor igual a 5. Ela foi usada num teste com um

if ... end if. No exemplo seguinte, um vetor de dados criado

na linha de comando do Linux e usado dentro do NCL: $ ncl 'dados=(/1900,1920,1940,1960,1980,2000/)' Copyright (C) 1995-2011 - All Rights Reserved University Corporation for Atmospheric Research NCAR Command Language Version 6.0.0

6.2. Especicando atribuies de varivel na linha de comando


The use of this software is governed by a License Agreement. See http://www.ncl.ucar.edu/ for more details. ncl 0> print(dados) Variable: dados Type: integer Total Size: 24 bytes 6 values Number of Dimensions: 1 Dimensions and sizes: [6] Coordinates: (0) 1900 (1) 1920 (2) 1940 (3) 1960 (4) 1980 (5) 2000

59

Da mesma forma, possvel criar uma varivel na linha de comando do NCL, usando-a com um script em NCL. Veja o exemplo seguinte: $ ncl anoInicio=1800 anoFim=2005 meuScript.ncl Neste exemplo, foram criadas duas variveis, anoInicio e anoFim, que sero usadas pelo script em NCL meuScript.ncl.

60

Captulo 6. Linhas de comando

Captulo 7 Usando cdigos externos


O NCL. que foi escrito em C, foi desenvolvido para permitir que os seus usurios chamem cdigos externos (Fortran ou outras bibliotecas, por exemplo). O principal foco aqui o uso de subrotinas em Fortran (77 ou 90). Para usar funes externas em linguagem C veja:

http://www.ncl.ucar. edu/Document/Manuals/Ref_Manual/NclExtend.shtml.

7.1 Interface NCL/Fortran


O uso de subrotinas em Fortran facilitada pelo utilitrio WRAPIT, que distribudo com o NCL. As opes disponveis pode ser vistas com WRAPIT

-h. O utilitrio WRAPIT compila o cdigo externo e gera um arquivo que,


por conveno, chamado de objeto compartilhado (shared object, em ingls). Este objeto identicado por uma extenso .so. A nica informao que WRAPIT necessita a interface entre o Fortran e o NCL, incluindo a declarao da subrotina e de seus argumentos. A especicao explcita dos tipos dos argumentos no necessria, pois o WRAPIT est ciente dos tipos padres do Fortran. O NCL usa um par delimitador como interface:

C NCLFORTSTART C NCLEND
para identicar a seo de interface. O Note que os delimitadores esto na

forma de comentrios em Fortran 77 e, assim, no tm efeito sobre o cdigo.

C NCLFORTSTART precede a declarao da subrotina enquanto que C


61

62

Captulo 7. Usando cdigos externos

NCLEND segue a ltima declarao de argumentos pertencentes interface.


Exemplo:

C NCLFORTSTART
subroutine demo(xin,xout,mlon,nlat,text) integer mlon, nlat real xin(mlon,nlat), xout(mlon,nlat) character*(*) text

C NCLEND

7.2 Subrotinas em Fortran 77


Quatro passos so necessrios para criar e chamar objetos compartilhados. Eles sero ilustrados por um exemplo: considere um arquivo fonte chamado

foo.f. Este arquivo pode conter uma ou mais subrotinas escritas em Fortran
77.

Passo 1: coloque cada subrotina entre os delimitadores de interface: C NCLFORTSTART


subroutine demo(xin,xout,mlon,nlat,text) integer mlon, nlat real xin(mlon,nlat), xout(mlon,nlat) character*(*) text

C NCLEND
O resto do cdigo em Fortran pode conter muitas subrotinas.

Passo 2: crie um objeto compartilhado usando WRAPIT. A linha de comando WRAPIT foo.f criar um arquivo chamado foo.so, ou seja, o nome do arquivo compartilhado ser o mesmo do arquivo Fortran 77, acrescido da extenso .so.

Passo 3: adicione uma declarao external ao script NCL. A declarao external consiste de um identicador arbitrrio, que o NCL usa para selecionar dinamicamente o objeto compartilhado externo (o mais comum usar o nome do arquivo Fortran) e o local do objeto compartilhado. O local padro o diretrio atual,

7.3. Subrotinas em Fortran 90


external FOO ./foo.so

63

Passo 4: chame a rotina desejada a partir do script NCL. H uma sintaxe


especca que deve ser usada, que inclui (a) o nome pelo qual o NCL identica o objeto compartilhado, (b) o separador :: Fortran, FOO::demo(xin,xout,nlon,nlat,text) e (c) a interface da subrotina

7.3 Subrotinas em Fortran 90


Chamar subrotinas em Fortran 90 requer, essencialmente, o mesmo processo usado para as subrotinas em Fortran 77, exceto pelo primeiro passo. Com subrotinas em Fortran 77, os delimitadores de interface do NCL so inseridos diretamente nas subrotinas em Fortran 77. Infelizmente, o analisador sinttico (parser, em ingls) Fortran usado pelo WRAPIT no entende a sintaxe do Fortran 90. Ento, o usurio deve criar um esboo de interface (stub interface, em ingls ) para cada subrotina chamada pelo NCL. Estes arquivos stub so uma repetio da lista de declaraes Fortran 90, na sintaxe do Fortran 77. No h necessidade de que estes arquivos sejam subrotinas completas. Lembre-se: o WRAPIT apenas trata a chamada da subrotina e os seus argumentos. Considere a seguinte subrotina contida num arquivo chamado soma.f90:

subroutine soma2numeros(x,y,z) implicit none real, intent(in) :: x,y real, intent(out) :: z z = x + y return end subroutine soma2numeros
Para us-la com o NCL, deve-se:

Passo 1: criar um esboo de interface usando a sintaxe do Fortran 77 e


armazen-lo em um arquivo chamado soma90.stub. Cada arquivo requer um conjunto de delimitadores

C NCLFORTSTART e C NCLEND:

1 Um stub um termo da rea de desenvolvimento de software que refere-se a um


pedao de cdigo usado para substituir algumas outras funcionalidades de programao. Mais em

http://pt.wikipedia.org/wiki/Stub.

64
C NCLFORTSTART

Captulo 7. Usando cdigos externos

subroutine soma2numeros(x,y,z) real x,y,z

C NCLEND

Passo 2: criar o objeto compartilhado usando o WRAPIT. Se mdulos so


usados no cdigo em Fortran 90, eles devem ser compilados antes das rotinas que usam-nos. O usurio deve especicar o compilador a ser usado na linha de comando. Este passo realizado com a linha de comando WRAPIT soma90.stub soma.f90

Passos 3 e 4: iguais aos realizados para subrotinas em Fortran 77.


Um script NCL que usaria estas subrotinas em Fortran 90 seria

external SOMA2NRO ./soma2nros.so begin


a=10. b=20. c=new(1,oat) SOMA2NRO::soma2numeros(a,b,c) print("A soma eh "+c)

end

7.4 Usando bibliotecas comerciais


O processo similar aquele usado com cdigos em Fortran 90, pois o usurio deve criar um arquivo stub para especicar explicitamente a sequncia de chamada necessria e os tipos de argumentos. 77 ser usada: Assuma que se quer usar a subrotina rcurv da biblioteca IMSL. Por convenincia, a sintaxe do Fortran

Passo 1: crie um programa invlucro arbitrariamente chamado de rcurvWrap.f :

C NCLFORTSTART
subroutine rcurvwrap(n,x,y,nd,b,s,st,n1) integer n, nd, n1 real x(n),y(n),st(10),b(n1),s(n1)

7.5. O que o WRAPIT faz


C NCLEND
call rcurv(n,x,y,nd,b,s,st) ! nome na IMSL return end

65

Passo 2: use o WRAPIT para compilar a subrotina invlucro e para


especicar o local da biblioteca IMSL para o sistema local:

WRAPIT -l mp -L/usr/local/lib64/r4i4 -l imsl_mp rcurvWrap.f

Passos 3 e 4: iguais aos das duas sees anteriores.


Agora, um script exemplo, que usaria este subrotina:

external IMSL ./rcurvWrap.so begin


x = (/0,0,1,1,2,2,4,4,5,5,6,6,7,7/) b = (/508.1,498.4,568.2,577.3,651.7,657.0,\ 755.3,758.9,787.6,792.1,841.4,831.8,\ 854.7,871.4/) nobs = dimsizes(y) nd = 2 n1 = nd+1 b = new(n1,typeof(y)) s = new(n1,typeof(y)) st = new(10,typeof(y)) IMSL::rcurvwrap(nobs,x,y,nd,b,s,st,n1) print(b) print(s) print(st)

end

7.5 O que o WRAPIT faz


O WRAPIT um script UNIX/Linux que desempenha vrias tarefas incluindo a compilao em Fortran e gerao de um objeto compartilhado (.so). Ele disponibiliza vrias opes aos usurios; veja-as digitando num terminal do UNIX/Linux

WRAPIT -h

66
O WRAPIT faz as seguintes tarefas:

Captulo 7. Usando cdigos externos

1. Usa um utilitrio do NCL chamado wrapit77, um programa em linguagem C, para criar um programa invlucro em linguagem C que chama o analisador gramatical (ou parser, em ingls) de Fortran 77 e cria o cdigo em linguagem C necessrio interface entre NCL e Fortran.

wrapit77 < foo.f >! foo_W.c


2. Compila e cria os objetos para os cdigos em linguagens C e Fortran:

cc -c foo_W.c ; foo_W.o f77 -c foo.c ; foo.o


3. Cria um objeto compartilhado dinmico (.so) usando o utilitrio local

ld.
4. Apaga os arquivos temporrios para que reste apenas o arquivo do objeto compartilhado (.so).

7.6 Mapeamento de arranjos NCL/Fortran


Em Fortran, a dimenso mais esquerda de um arranjo (as linhas de uma matriz, por exemplo) aquela que varia mais rapidamente, enquanto que no NCL a dimenso mais direita que varia mais rapidamente. Em algumas situaes, isto pode causar confuso. Apesar disto, raramente se faz necessrio a reordenao de um arranjo ao chamar um subrotina escrita em Fortran, a partir de um script em NCL. Ento, mesmo sabendo que os nomes das dimenses aparecem em ordem inversa, os elementos dos arranjos mapeiam-se diretamente. aplica-se aqui: NCL x(time,lev,lat,lon) <=map=> Fortran x(lon,lat,lev,time) A regra as dimenses de variao mais rpida em uma linguagem mapeiam dimenso de variao mais rpida em outra linguagem

Considere agora dois arranjos com N=2 e M=3: ncl: x(N,M) x(0,0) x(0,1) <==> <==> <==> x(M,N) : Fortran x(1,1) x(2,1)

7.7. NCL e Fortran (ou C) em um script Shell


x(0,2) x(1,0) x(1,1) x(1,2) <==> <==> <==> <==> x(3,1) x(1,2) x(2,2) x(3,2)

67

7.7 NCL e Fortran (ou C) em um script Shell


Ao trabalhar com um script em NCL que chama um ou mais objetos compartilhados (.so) em Fortran (ou em C), conveniente combinar os vrios passos em um nico script em Shell, do UNIX/Linux. Abaixo est um esboo de um script em C-Shell contendo um exemplo do uso do NCL e do Fortran, utilizando os cdigos apresentados na seo 7.3:

#!/usr/bin/csh # ===== Cdigo em NCL ======== cat >! main.ncl  "END_NCL" external SOMA2NRO "./soma2nros.so" begin a=10. b=20. c=new(1,oat) SOMA2NRO::soma2numeros(a,b,c) print("A soma eh "+c) end "END_NCL" # ==== Cdigo em Fortran 90 ====== cat >! soma2nros.f90  "END_F90" subroutine soma2numeros(x,y,z) implicit none real, intent(in) :: x,y real, intent(out) :: z z = x + y return end subroutine soma2numeros "END_F90" # ==== Arquivo STUB para Fortran 90 == cat >! soma2nros.stub  "END_STUB"

68
C NCLFORTSTART

Captulo 7. Usando cdigos externos

subroutine soma2numeros(x,y,z) real x,y,z C NCLEND "END_STUB" # ===== Chama o WRAPIT ===== WRAPIT soma2nros.stub soma2nros.f90 # ===== Executa o cdigo em NCL ===== ncl main.ncl >&! main.out exit

Captulo 8 Grcos
O NCL possui trs reas distintas. A primeira relaciona-se leitura e O NCL disponibiliza uma escrita de arquivos, visto aqui, no Captulo 3. arquivos.

sintaxe nica, que suporta o referenciamento direto variveis contidas em Isto possibilita que no apenas uma varivel ser lida ou escrita O acesso informaes adicionais inteiramente, mas que pores dela possam ser acessadas, por meio das regras de indexao de variveis de arquivo. sobre as variveis, chamadas de metadados. Normalmente, estes metadados fornecem informaes a respeito das coordenadas de grade, unidades, valores ausentes (_FillValue ) entre outras. A segunda rea refere-se ao processamento de dados. O aprendizado desta rea depende da complexidade das necessidades de processamento de dados do usurio. Finalmente, a gerao de grcos refere-se ltima rea. As sintaxes dos O NCL usa

comandos grcos so, normalmente, simples, mas quem acaba denindo a verdadeira complexidade a aplicao dada pelo usurio. a Biblioteca de Utilidades de Alto Nvel do NCAR Graphics (HLUs) para congurar a sada grca. Uma breve discusso sobre como criar grcos dada neste captulo. impossvel abordar todos os tipos de grcos que podem ser produzidos pelo NCL. Aqui, dada maior nfase ao conceito de gerao de grcos, buscando evidenciar os pontos mais importantes e necessrios criao de qualquer tipo de grco. O leitor convidado a visitar a seo de exemplo do site ocial do NCL -

http://www.ncl.ucar.edu/Applications/

- para

conhecer melhor as potencialidades grcas do NCL.

69

70

Captulo 8. Grcos

8.1 Um script simples


A criao de grcos pode tornar-se muito complexa, dependendo de como se quer plotar os dados em mos. Em termos gerais, h cinco passos bsicos necessrios para se criar um grco simples:

1. Abra uma rea de trabalho grca, ou workstation 2. Descreva os seus dados 3. Crie o grco desejado 4. Desenhe o grco 5. Chame a subrotina frame

O script em NCL abaixo mostra como plotar um grco XY simples, apresentado na Figura 8.1, que servir para ilustrar os passos descritos acima.

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" begin wks = gsn_open_wks( "x11", "xyPlot") y = random_uniform(-10,10,100) plotXY = gsn_csm_y( wks, y, False ) end
As duas primeiras linhas deste script carregam memria as interfaces e rotinas grcas de alto nvel que so distribudas com o NCL. Embora as funes e subrotinas includas nas bibliotecas possam ser carregadas a qualquer instante antes de seu uso, usa-se, como conveno, o carregamento delas no inicio do script, antes da linha begin. Os grcos do NCL so baseados em mtodos orientados a objetos (OO). Esta abordagem fornece poder e exibilidade considerveis, mas pode ser muito fatigante e tediosa. Para ajudar os usurios, dois conjuntos de interfaces grcas de alto nvel foram desenvolvidas. Estas interfaces facilitam o

8.1. Um script simples

71

Figura 8.1:

Grco resultante do script NCL

processo de visualizao, retendo os benefcios da abordagem OO. Por razes histricas, todas as interfaces de plotagem comeam com gsn_, que signifca  Getting Started with NCL. A primeira linha aps begin realiza o primeiro passo: cria uma rea de trabalho grca. A funo gsn_open_wks pede dois argumentos (i) o tipo da rea grca e (ii) o ttulo dela. O tipo da rea grca pode ser dos seguintes (a) um arquivo NCGM ("ncgm"), (b) um arquivo PostScript ("ps", "eps"ou "epsi"), (c) um arquivo PDF ("pdf") ou (d) uma janela X11 ("x11"). Neste exemplo, uma janela X11 com ttulo xyPlot ser criada. Note que o nome desta varivel uma abreviatura de workstation, termo dado rea de trabalho grca, mas no obrigatrio o uso deste nome, apesar dele estar presente nos inmeros exemplos disponveis no site ocial do NCL. A linha seguinte atribui a varivel y um vetor com 100 valores aleatrios dentro do intervalo

[10; 10],

criado por um gerador de nmeros aleat-

rios baseado em uma distribuio uniforme, com a ajuda da funo

ran-

72

Captulo 8. Grcos

dom_uniform. Pode-se dizer que temos aqui o passo 2, ou seja, a descrio


dos nossos dados, que foram atribudos a uma varivel do NCL. Na linha posterior cria-se o grco deseja, ou seja, o nosso 3 passo. Nesta linha, criada, por atribuio, uma varivel do tipo graphic que armazenar o nosso grco. O grco criado por meio da funo grca

gsn_csm_y, um

grco do tipo XY. Esta funo, para funcionar, precisa de trs informaes: (1) onde desenhar o grco; (2) que dados usar e (3) onde esto as opes para modicao do grco, caso sejam denidas. Para indicar onde desenhar, basta passar funo a varivel do NCL com a qual criou-se a rea de trabalho grca, neste caso, a varivel wks, criada no primeiro passo. Os dados que sero usados para o grco so passados funo por meio da varivel y. Neste exemplo, nenhuma opo de modicao do grco passada. Portanto, o grco ser criado em sua congurao padro. A estas opes dado o nome de recursos grcos (resources, em seu termo original, em ingls). Elas sero melhor discutidas na seo seguinte. Os ltimos dois passos para a criao do nosso grco so realizados automaticamente pela funo especcos. Pronto! Nossos dados foram plotados num grco XY, no qual os valores

gsn_csm_y. Em certas situaes necessrio

alterar este comportamento padro. Isto feito por meio de recursos grcos

dos elementos da varivel y est associada a sua posio no vetor, ou seja, o primeiro valor do vetor y posicionado em conforme mostra a Figura 8.1.

x = 0,

o segundo em

e assim por diante, at o ltimo valor, que ser posicionado em

x = 1 x = 99,

8.2 Recursos grcos (resources )


As funes grcas tm um comportamento padro para a gerao de grcos. Dependendo do tipo de grco e das necessidades de personalizao pode ser necessrio alterar este comportamento padro. Os recursos grcos proporcionam o meio pelo qual isto feito. Mas, o que so os recursos grcos? Como deni-los? Como pass-los s funes grcas? Os recursos grcos so simplesmente atributos. Isto posto, temos logo em mente que eles so denidos com a ajuda do smbolo @. A pergunta que surge em sequncia : se so atributos, so atributos de que varivel? Os

8.2. Recursos grcos (resources)

73

recursos grcos so atributos de uma varivel do tipo logical, que possui um valor True. Para ilustrar isto, vamos modicar o nosso script anterior para incluir ttulos nos eixos X e Y e para o grco:

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" begin wks = gsn_open_wks( "x11", "xyPlot") y = random_uniform(-10,10,100) opcoes = True opcoes@tiMainString = "Graco exemplo!" opcoes@tiXAxisString = "eixo X - indice do vetor" opcoes@tiYAxisString = "eixo Y - valores aleatorios" opcoes@gsnMaximize = True plotXY = gsn_csm_y( wks, y, opcoes ) end
Neste script criamos uma nova varivel, chamada opcoes, cujo valor True, sendo uma varivel do tipo logical. Nas quatro linhas seguintes, vrios atributos so passados a esta nova varivel. Os trs primeiros atributos referem-se aos ttulos do grco, do eixo X e do eixo Y, respectivamente. J o ltimo permite aumentar o tamanho grco, que por padro criado num tamanho menor. Uma caracterstica interessante e bastante til dos recursos grcos pode ser notada em seus nomes. Os trs atributos que denem ttulos aos grcos tem seus nomes iniciados por ti, abreviatura de title, ou seja, ttulo, em ingls. Assim, intuitivo esperar que todos os demais atributos relacionados a ttulos comecem com os mesmos dois caracteres dos usados neste exemplo. D uma olhada nos recursos grcos existentes no site ocial do NCL:

http://www.ncl.ucar.edu/Document/Graphics/Resources/.

Para usar os recursos denidos varivel opcoes necessrio pass-la funo

gsn_csm_y, conforme mostrado na penltima linha do script. Como a


funo entende que a varivel opcoes possui recursos? Simples, a funo (e qualquer funo grca) verica se a varivel lgica possui um valor igual a

True, ou seja, verdadeiro. Em caso positivo, ela entende que h uma varivel
com recursos e verica quais foram denidos. Aqueles aplicveis ao tipo de grco que est sendo desenhado so usados, enquanto que os demais so

74

Captulo 8. Grcos

ignorados. Caso negativo, ou seja, se a varivel opcoes tivesse um valor False a funo grca ignoraria todo e qualquer recurso passado a ela. A Figura 8.2 exibe o grco gerado pelo script acima.

Figura 8.2:

Grco ilustrando o uso de recursos.

8.3 Plotando campos meteorolgicos


Grcos XY so os mais simples gerados pelo NCL. Na Meteorologia, a anlise de variveis meteorolgicas em uma certa regio espacial uma prtica comum e importante para o entendimento dos fenmenos atmosfricos e previso de tempo. A distribuio espacial de variveis meteorolgicas so normalmente encontradas em arquivos de dados, sejam eles em formatos binrios ou em formato ASCII. O acesso a ambos tipos de arquivos j foi tratado no Captulo 3 e no sero discutidos neste captulo. Para facilitar o entendimento da plotagem de campos, vamos usar o script abaixo:

8.3. Plotando campos meteorolgicos


load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" begin ; variaveis e parametros nx = 10 ny = 10 pi = acos(-1.) pnmm = new( (/ny,nx/), oat ) ; variacao dos eixos x e y dx = 2*pi/nx dy = 2*pi/ny ; gerando campo cticio do j=0,ny-1 do i=0,nx-1 pnmm(j,i) = sin(i*dx)*cos(j*dy)*20.+1010. end do end do ; ambiente grco wks = gsn_open_wks( "x11", "campoFicticio") ; recurso grco opcoes = True opcoes@gsnMaximize = True opcoes@tiMainString = "Campo cticio - PNMM [hPa] - NCL" ; plotando grco plot = gsn_csm_contour( wks, pnmm, opcoes ) end

75

Vamos discutir sobre este script se referenciando a blocos de linhas de comandos. O primeiro bloco aps o comando

begin dene trs variveis escalares,

que possuem parmetros que sero usados no script, e um arranjo bidimensional, que armazenar o campo ctcio de presso ao nvel mdio do mar (PNMM) que ser plotado. O segundo bloco dene outras duas variveis

76

Captulo 8. Grcos

escalares, que sero usadas para a criao do campo ctcio.

Figura 8.3:

Campo ctcio de PNMM. Veja o texto para maiores detalhes.


do ... end do vistos na seo 2.6.1 do Captulo 2.

O terceiro bloco de linhas de comando cria o campo ctcio de PNMM usando dois laos de repetio Cada loop

do ... end do associado a uma dimenso da varivel pnmm,

que esto associadas s dimenses espaciais do campo; latitude e longitude, por exemplo. Note que temos um loop dentro de outro. A esta congurao d-se o nome de loops aninhados, sendo aquele mais interno o de mais rpida variao. Em suma, os loops permitem o acesso a pontos distintos no espao, com coordenadas

(j, i),

aos quais so atribudos valores ctcios

de PNMM dados pela funo usada neste bloco. Nos blocos seguintes, no temos nada de novo, exceto pelo uso de uma nova funo:

gsn_csm_contour, apropriada para o desenho de campos. Neste


desenhar a

caso, o nome da funo bastante intuitivo, pois a palavra contour presente em seu nome refere-se a contorno, indicativo de seu objetivo: 8.3 mostra o resultado deste script. distribuio de uma varivel por meio de isolinhas ou contornos. A Figura

8.4. As funes draw e frame

77

8.4 As funes draw e frame


Foi mencionado anteriormente que as duas etapas nais da criao de um grco no NCL so feitas automaticamente pelas funes de plotagem. Nos exemplos anteriores, as funes

gsn_csm_y e gsn_csm_contour. Quando

pode ser necessrio mudar este comportamento? Um exemplo simples e que abordado aqui a incluso de mais de uma linha num grco XY. Para ilustrar isso, vamos usar o mesmo exemplo inicial apresentado neste captulo. No script abaixo, temos um vetor de dados adicional e queremos adicion-lo ao grco j feito.

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" begin wks = gsn_open_wks( "x11", "xyPlot") y = random_uniform(-10,10,100) y2 = random_normal(0,1,100) opcoes = True opcoes@tiMainString = "Graco exemplo!" opcoes@tiXAxisString = "eixo X - indice do vetor" opcoes@tiYAxisString = "eixo Y - valores aleatorios" opcoes@gsnMaximize = True opcoes@gsnFrame = False opcoes@gsnDraw = False plotXY = gsn_csm_y( wks, y, opcoes ) linha = gsn_add_polyline( wks, plotXY, ispan(0,99,1), y2, False ) draw(plotXY) frame(wks) end
Aqui temos duas alteraes signicativas, alm da incluso de um outro vetor de dados, y2 : (1) o uso dos atributos gsnFrame e gsnDraw, ambos com o mesmo valor lgico False e (2) o uso de uma nova funo de plotagem,

gsn_add_polyline, que adiciona a nova linha ao grco.

Os atributos

gsnDraw = False e gsnFrame = False avisam o grco gerado pelas fun-

78
es

Captulo 8. Grcos
gsn_* no devem ser desenhadas instantaneamente e que a pgina de

plotagem no deve ser nalizada, respectivamente.

Grco XY que ilustra a plotagem de duas linhas, separadamente. Veja o texto para maiores detalhes.
Figura 8.4: Aqui deve-se esclarecer um conceito importante: uma rea de trabalho grca (a workstation) pode conter vrias pginas, cada uma com um grco diferente. A estas pginas d-se o nome de frame. Assim, por denio, ao se usar qualquer uma das funes

gsn_*, o grco ser desenhado e a

pgina ou frame ser nalizada. Podemos montar uma analogia disto com um bloco de desenho. Ao desenharmos numa pgina, viramos a pgina para desenhar um novo desenho. terminar o desenho. Aps usar a funo a funo Claro que, dependendo do desenho, podemos desenh-lo por partes. Desenhamos uma parte e no viramos a pgina, para

gsn_csm_y, que dene qual grco ser gerado, usamos

gsn_add_polyline, que adiciona uma linha ao grco. Note que

necessrio passar 5 argumentos a esta funo. O primeiro indica em qual rea de trabalho grca esta linha ser desenhada (wks), o segundo indica em

8.5. Campos meteorolgicos sobre mapas

79

qual grco a linha ser adicionada (plotXY), o terceiro e o quarto referem-se s coordenadas X e Y da linha a ser desenhada, respectivamente. Por m, o ltimo argumento refere-se aos recursos grcos que modicam o desenho padro de uma linha. Neste exemplo, nenhum passado funo. Para nalizar, usa-se as funes

draw e frame para desenhar o grco que

encontra-se na varivel plotXY e para nalizar a pgina de plotagem da rea de trabalho grca, que est denida pela varivel wks, respectivamente. A Figura 8.4 apresenta o resultado do script discutido nesta seao. Apesar deste exemplo simples poder ser feito de uma maneira mais simples (ca o desao ao usurio!) pode-se facilmente extrapol-lo para outras situaes como um campo meteorolgico, no qual pode-se querer incluir uma linha para indicar onde ser feito um determinado corte vertical, por exemplo, ou um retngulo para indicar a rea de maior interesse para uma determinada anlise.

8.5 Campos meteorolgicos sobre mapas


Na seo 8.3 viu-se a plotagem de campos meteorolgicos, usando um campo ctcio de PNMM. Entretanto, o campo gerado no foi posicionado sobre qualquer mapa. Ou seja, ao campo no foi dada nenhuma coordenada de localizao geogrca. Para que um campo seja posicionado sobre alguma regio geogrca deve-se ter

1. coordenadas associadas s dimenses do arranjo que se referem s posies espaciais, normalmente latitude e longitude, dos dados. 2. uma funo que plote o campo sobre um mapa

O primeiro item fcil de resolver, anal de contas, j sabemos como atribuir nomes e coordenadas s dimenses de um arranjo, conforme explicado no Captulo 2. O segundo item tambm fcil de resolver, bastando procurar no conjunto de funes do NCL aquela que oferece esta capacidade. Neste caso, usaremos a funo

gsn_csm_contour_map. Para ilustrar o uso de

mapas, vamos nos basear no mesmo script apresentado na seo 8.3:

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"

80

Captulo 8. Grcos

begin ; variaveis e parametros nx = 10 ny = 10 pi = acos(-1.) pnmm = new( (/ny,nx/), oat ) ; variacao dos eixos x e y dx = 2*pi/nx dy = 2*pi/ny ; gerando campo cticio do j=0,ny-1 do i=0,nx-1 pnmm(j,i) = sin(i*dx)*cos(j*dy)*20.+1010. end do end do ; atribuindo coordenadas aos dados pnmm!0 = "lat" pnmm!1 = "lon" pnmm&lat = fspan(-35,-45,10) pnmm&lon = fspan(-55,-45,10) pnmm&lat@units = "degrees_north" pnmm&lon@units = "degrees_east" ; ambiente grco wks = gsn_open_wks( "x11", "campoFicticio") ; recursos grcos opcoes = True opcoes@gsnMaximize = True opcoes@tiMainString = "Campo cticio - PNMM [hPa] - NCL" opcoes@gsnAddCyclic = False opcoes@mpMinLatF = min(pnmm&lat) opcoes@mpMaxLatF = max(pnmm&lat) opcoes@mpMinLonF = min(pnmm&lon) opcoes@mpMaxLonF = max(pnmm&lon)

8.5. Campos meteorolgicos sobre mapas


; plotando grco plot = gsn_csm_contour_map( wks, pnmm, opcoes ) end

81

Neste script h um bloco de linhas de comando adicional que atribui coordenadas s dimenses do arranjo pnmm. Note a incluso das unidades das coordenadas. Isto importante. Caso no sejam denidas um erro ocorrer e o grco no ser gerado. avisa para a funo Alm disso, h cinco recursos adicionais, em relao ao script apresentado na seo 8.3. O recurso gsnAddCyclic=False

gsn_csm_contour_map que os dados no so glo-

bais. Caso este recurso no tivesse sido denido desta maneira as isolinhas do campo no seriam plotadas.

Figura 8.5:

detalhes.

Campo ctcio de PNMM sobre um mapa. Veja o texto para maiores

Os recursos seguintes tm seus nomes iniciados pelos caracteres mp, indicando que so recursos grcos que controlam a plotagem de mapas. Neste caso,

82
eles denem a rea do mapa a ser plotado.

Captulo 8. Grcos
Caso eles no tivessem sido

denidos, os dados ctcios de PNMM apareceriam num mapa mundi. Note que os limites so denidos em funo das coordenadas atribudas ao arranjo

pnmm. A Figura 8.5 exibe o resultado do script aqui apresentado e discutido.


Veja que o mapa est preenchido e que no h divises polticas. H recursos grcos para mudar isto. A pgina ocial do NCL oferece inmeros exemplos que ilustram como alterar a plotagem de mapas. Visite-a!

Apndice A Acentuando palavras em grcos do NCL


No h no NCL nenhuma fonte com caracteres acentuados e nem a interpretao automtica de strings com tais caracteres. Isso atrapalha os usurios cujas lnguas nativas exigem estes caracteres. com acentos no NCL, mas um pouco chato. Os caracteres acentuados so gerados por meio de Cdigos de Funo, que permite controlar vrios aspectos de um texto. Veja a descrio completa destes cdigos em possvel escrever palavras

code.shtml.

http://www.ncl.ucar.edu/Document/Graphics/function_

Para facilitar a tarefa de escrever corretamente, apresentamos abaixo os cdigos para gerar os caracteres acentuados. Os nomes das variveis do tipo string, que contm os cdigos, seguem os nomes da tabela de acentos do HTML. Veja abaixo os caracteres acentuados e algumas palavras em portugus, mostrando como o NCL os plota.

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin ; tabela Agrave = agrave = Aacute = de acentos "A~H-15V6F35~A~FV-6H3~" ; "a~H-13V2F35~A~FV-2H3~" ; "A~H-15V6F35~B~FV-6H3~" ;
83

84

Captulo A. Acentuando palavras em grcos do NCL

aacute = "a~H-13V2F35~B~FV-2H3~" ; Acirc = "A~H-15V6F35~C~FV-6H3~" ; acirc = "a~H-13V2F35~C~FV-2H3~" ; Atilde = "A~H-15V6F35~D~FV-6H3~" ; atilde = "a~H-13V2F35~D~FV-2H3~" ; Auml = "A~H-15V6F35~H~FV-6H3~" ; auml = "a~H-13V2F35~H~FV-2H3~" ; Egrave = "E~H-15V6F35~A~FV-6H3~" ; egrave = "e~H-13V2F35~A~FV-2H3~" ; Eacute = "E~H-15V6F35~B~FV-6H3~" ; eacute = "e~H-13V2F35~B~FV-2H3~" ; Ecirc = "E~H-15V6F35~C~FV-6H3~" ; ecirc = "e~H-13V2F35~C~FV-2H3~" ; Euml = "E~H-15V6F35~H~FV-6H3~" ; euml = "e~H-13V2F35~H~FV-2H3~" ; Igrave = "I~H-10V6F35~A~FV-6H3~" ; igrave = "i~H-10V2F35~A~FV-2H3~" ; Iacute = "I~H-08V6F35~B~FV-6H3~" ; iacute = "i~H-08V2F35~B~FV-2~" ; Icirc = "I~H-09V6F35~C~FV-6H3~" ; icirc = "i~H-09V2F35~C~FV-2H3~" ; Iuml = "I~H-09V6F35~H~FV-6H3~" ; iuml = "i~H-09V2F35~H~FV-2H3~" ; Ograve = "O~H-15V6F35~A~FV-6H3~" ; ograve = "o~H-13V2F35~A~FV-2H3~" ; Oacute = "O~H-15V6F35~B~FV-6H3~" ; oacute = "o~H-13V2F35~B~FV-2H3~" ; Ocirc = "O~H-16V6F35~C~FV-6H3~" ; ocirc = "o~H-14V2F35~C~FV-2H3~" ; Otilde = "O~H-15V6F35~D~FV-6H3~" ; otilde = "o~H-13V2F35~D~FV-2H3~" ; Ouml = "O~H-16V6F35~H~FV-6H3~" ; ouml = "o~H-14V2F35~H~FV-2H3~" ; Ugrave ugrave Uacute uacute = = = = "U~H-15V6F35~A~FV-6H3~" "u~H-13V2F35~A~FV-2H3~" "U~H-13V6F35~B~FV-6H3~" "u~H-13V2F35~B~FV-2H3~" ; ; ; ;

85
Ucirc = "U~H-15V6F35~C~FV-6H3~" ; ucirc = "u~H-13V2F35~C~FV-2H3~" ; Uuml = "U~H-15V6F35~H~FV-6H3~" ; uuml = "u~H-13V2F35~H~FV-2H3~" ; Cedil = "C~H-15F35~K~FH2~" ; cedil = "c~H-13F35~K~FH2~" ; Ntilde = "N~H-15V6F35~D~FV-6H3~" ; ntilde = "n~H-13V2F35~D~FV-2H3~" ; ; ambiente grafico wks = gsn_open_wks("x11","acentos") ; recursos do texto txres = True txres@txFontHeightF = 0.03 ; plotando caracteres acentuados txres@txJust = "CenterCenter" titulo1 = "Acentua"+cedil+atilde+"o com o NCL" gsn_text_ndc(wks,titulo1,.5,.95,txres) txres@txJust = "CenterLeft" titulo2 = "Caracteres acentuados:" gsn_text_ndc(wks,titulo2,0.,.85,txres) texto = Agrave+" "+agrave+" "+Aacute+" "+\ aacute+" "+Acirc+" "+acirc+" "+\ Atilde+" "+atilde+" "+ \ Auml+" "+auml gsn_text_ndc(wks,texto,.2,.8,txres) texto = Egrave+" "+egrave+" "+Eacute+" "+\ eacute+" "+Ecirc+" "+ecirc+" "+\ Euml+" "+euml gsn_text_ndc(wks,texto,.2,.75,txres) texto = Igrave+" "+igrave+" "+Iacute+" "+\ iacute+" "+Icirc+" "+icirc+" "+\ Iuml+" "+iuml

86

Captulo A. Acentuando palavras em grcos do NCL

gsn_text_ndc(wks,texto,.2,.7,txres) texto = Ograve+" "+ograve+" "+Oacute+" "+\ oacute+" "+Ocirc+" "+ocirc+" "+\ Otilde+" "+otilde+" "+\ Ouml+" "+ouml gsn_text_ndc(wks,texto,.2,.65,txres) texto = Ugrave+" "+ugrave+" "+Uacute+" "+\ uacute+" "+Ucirc+" "+ucirc+" "+\ Uuml+" "+uuml gsn_text_ndc(wks,texto,.2,.6,txres) texto = Cedil+" "+cedil+" "+Ntilde+" "+ntilde gsn_text_ndc(wks,texto,.2,.55,txres) ; algumas palavras acentuadas titulo3 = "Algumas palavras:" gsn_text_ndc(wks,titulo3,0.,.45,txres) txres@txFontHeightF = 0.025 texto = "ver"+atilde+"o - inst"+aacute+\ "vel - hist"+oacute+"rico - mat"+eacute+"ria" gsn_text_ndc(wks,texto,.1,.4,txres) texto = "precipita"+cedil+atilde+\ "o - INFORMA"+Cedil+Otilde+"ES - tr"+ecirc+"s" gsn_text_ndc(wks,texto,.1,.35,txres) texto = "dire"+cedil+otilde+\ "es - El-Ni"+ntilde+"o - LA-NI"+Ntilde+"A" gsn_text_ndc(wks,texto,.1,.3,txres) texto = "got"+iacute+"culas - pol"+ecirc+\ "mica - Amaz"+ocirc+"nia" gsn_text_ndc(wks,texto,.1,.25,txres) texto = "mec"+acirc+"nica - portugu"+ecirc+\ "s - ci"+ecirc+"ncia atmosf"+eacute+"rica" gsn_text_ndc(wks,texto,.1,.2,txres)

87
texto = Aacute+"reas - din"+acirc+"mica - Sa"+\ uacute+"de" gsn_text_ndc(wks,texto,.1,.15,txres) frame(wks) end

Neste exemplo, os caracteres acentuados esto no script que os usam, mas podem ser colocados num arquivo .ncl separado que pode ser carregado com o comando

load. A Figura A.1 apresenta o resultado do script.

Figura A.1:

Caracteres acentuados no NCL.

A fonte de caracteres 35 contm os caracteres de acentuao, sendo usada, extensivamente, na criao dos caracteres acentuados. Vamos analisar a construo de um dos caracteres, sendo direta a extenso desta anlise aos demais. Vejamos o caractere , denido no script acima como

88

Captulo A. Acentuando palavras em grcos do NCL

aacute = "aH-13V2F35BFV-2H3" A explicao se dar quase caractere por caractere: a o prprio caractere a, que ser acentuado o cdigo de funo de texto, que pode ser modicado no arquivo .hluresle. H-13 V2 F35 B F V-2 H3 move a posio do texto atual 13 pontos na horizontal, esquerda (negativo). move a posio do texto atual 2 pontos na vertical, para cima. usa a fonte de caracteres 35. usa o caractere da fonte de caracteres 35. volta a usar a fonte de caracteres anterior. move a posio do texto atual 2 pontos na vertical, para baixo. move a posio do texto na horizontal, trs pontos direita. Em suma, os caracteres acentuados so montados manualmente, por meio de movimentos do cursor de impresso de caractere para a direita, esquerda, para cima e para baixo. Quem j usou uma mquina de escrever consegue percebeu o esquema de acentuao, ou seja, (i) escreve o caractere, (ii) volta o cursor para a posio do caractere escrito, (iii) eleva ou abaixa o cursor, (iv) escreve o sinal de acentuao e (v) faz o caminho de volta para continuar a escrever o texto. Note que os cdigos de funo de texto cam sempre entre indicador do uso destes cdigos.

o smbolo

Apndice B Lendo arquivos ASCII complicados


possvel deparar-se com arquivos de dados com uma formatao complicada ou que mistura dados de tipos diferentes, por exemplo, uma tabela de dados contendo valores numricos e strings de caracteres. Suponha que exista um arquivo chamado temp.txt na pasta dados, contendo colunas com as seguintes informaes: latitude, longitude, temperatura do ar em 2 metros e o nome das estao meteorolgicas separadas por ponto-e-vrgula. As primeiras linhas deste arquivo so mostradas abaixo: -32.03;-52.09;32.8;Rio Grande -31.87;-52.34;29.7;Pelotas -30.54;-52.52;29.2;Encruzilhada do Sul Para abrir o arquivo, usa-se a funo usando uma estratgia diferente: abrir = asciiread("dados/temp.txt", -1, "string") Note que no foram especicadas dimenses para os dados do arquivo (-1) e o tipo de informao dentro do arquivo denido como do tipo string, uma vez que existem letras e nmeros. Caso este arquivo contivesse o cdigo de cada estao, ao invs do seu nome, na quarta coluna dos dados, poderamos abrir o arquivo com a linha de comando abaixo: abrir = asciiread("dados/temp.txt", (/100,4/), "oat")

asciiread. Entretanto, no possvel

abri-lo usando esta funo em seu modo habitual. Assim, os dados so lidos

89

90

Captulo B. Lendo arquivos ASCII complicados

Supondo, claro, que os arquivo possua 100 linhas de dados. Voltando ao exemplo mais complicado, temos um arranjo unidimensional, chamado abrir contendo, em cada elemento, uma linha do arquivo de dados. Agora, para que cada coluna seja lida e armazenada em uma varivel diferente, utilizamos a funo

str_get_eld:

coluna1 = str_get_eld(abrir, 1, ";") coluna2 = str_get_eld(abrir, 2, ";") coluna3 = str_get_eld(abrir, 3, ";") coluna4 = str_get_eld(abrir, 4, ";") A funo

str_get_eld usa o terceiro argumento passado a ela, neste caso

o ponto-e-vrgula, para separar os dados em vrias colunas. A partir desta separao, ele extrai da varivel abrir a coluna indicada pelo nmero passado no segundo argumento. Agora, as variveis coluna1, coluna2, coluna3 e coluna4 contm, respectivamente, as informaes de latitude, longitude, temperatura em 2 metros e o nome das estaes. Entretanto, ainda no possvel usar as informaes numricas, pois elas esto como informaes do tipo string. Para possibilitar o seu uso, vamos converter as informaes para o formato numrico do tipo oat usando a funo lat = stringtooat(campo1) lon = stringtooat(campo2) t2m = stringtooat(campo3) Agora, possvel trabalhar com estas informaes numricas, ou seja, uslas em clculos e geoposicionamento. A linguagem NCL possui outras funes que transformam os campos de um tipo para outro, como (transforma de string para inteiro ),

stringtooat:

stringtoint

strngtochar (transforma de string para

caracter ) e integertochar (transforma de inteiro para caracter ). Um guia


completo destas funes pode ser obtido na pgina de documentao do ncl:

http://www.ncl.ucar.edu/Document/.

Apndice C Diviso poltica em mapas


Nos estudos de meteorologia comum a gerao de mapas com campos atmosfricos, que permitem-nos analisar o tempo ou o clima para uma determinada regio. Dependendo, claro, do tipo do campo plotado. A localizao geogrca das caractersticas observadas nos campos meteorolgicos crucial para a elaborao de diagnsticos e previses. Isto posto, percebe-se a importncia de apresentar num mapa a separao poltica de uma regio. Para ilustrar esta capacidade do NCL, vamos modicar o script apresentado ao nal do Captulo 8:

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" begin ; variaveis e parametros nx = 10 ny = 10 pi = acos(-1.) pnmm = new( (/ny,nx/), oat ) ; variacao dos eixos x e y dx = 2*pi/nx dy = 2*pi/ny ; gerando campo cticio
91

92
do j=0,ny-1 do i=0,nx-1

Captulo C. Diviso poltica em mapas

pnmm(j,i) = sin(i*dx)*cos(j*dy)*20.+1010. end do end do ; atribuindo coordenadas aos dados pnmm!0 = "lat" pnmm!1 = "lon" pnmm&lat = fspan(-35,-45,10) pnmm&lon = fspan(-55,-45,10) pnmm&lat@units = "degrees_north" pnmm&lon@units = "degrees_east" ; ambiente grco wks = gsn_open_wks( "x11", "campoFicticio") ; recursos grcos opcoes = True opcoes@gsnMaximize = True opcoes@tiMainString = "PNMM [hPa] sobre um mapa visao politica" opcoes@gsnAddCyclic = False opcoes@mpMinLatF = min(pnmm&lat) opcoes@mpMaxLatF = max(pnmm&lat) opcoes@mpMinLonF = min(pnmm&lon) opcoes@mpMaxLonF = max(pnmm&lon) ; recursos grcos para o mapa opcoes@mpFillOn = False opcoes@mpDataSetName = "Earth..4" opcoes@mpDataBaseVersion = "MediumRes" opcoes@mpOutlineOn = True opcoes@mpOutlineSpeciers = (/"Brazil:states"/) ; plotando grco plot = gsn_csm_contour_map( wks, pnmm, opcoes ) end C com di-

93
Note que foi includo um novo bloco de linhas de comandos com novos recursos grcos para mapas, ou seja, recursos cujos nomes iniciam com mp. O primeiro, mpFillOn = False, desliga o preenchimento do mapa, comportamento visto na plotagem de campos sobre mapas, no Captulo 8. O segundo e o terceiro recursos grcos, mpDataSetName = "Earth..4" e mpDataBase-

Version = "MediumRes", denem o banco de dados de mapas a ser usado.


J o ltimo, mpOutlineSpeciers = (/"Brazil:states"/), indicam que diviso deve ser plotada, que neste caso so os estados brasileiros. mostra o resultado deste script. A Figura C.1

Figura C.1:

Campo ctcio de PNMM sobre um mapa contendo a diviso estadual do Brasil. Veja o texto para maiores detalhes.
Consulte os inmeros exemplos relacionados a mapas no site ocial do NCL -

http://www.ncl.ucar.edu/Applications/maponly.shtml - para conhecer


as possibilidades oferecidas.

94

Captulo C. Diviso poltica em mapas

Apndice D Valores ausentes no NCL


Se uma varivel do NCL tem um atributo chamado _FillValue, ento todos os valores nesta varivel que so iguais ao valor deste atributo so considerados como valores ausentes. Este atributo foi originalmente usado no formato de arquivo netCDF para representar dados ausentes e foi, posteriormente, adotado pelo NCL para o mesmo propsito.

Os exemplos abaixo mostram diferentes meios de se passar este atributo no NCL:

x@_FillValue = -999 x@_FillValue = default_llvalue("double") x = new( 5, double, 1e20 ) x@_FillValue = y@_FillValue assignFillValue(y,x)

Na primeira linha, denimos o valor do atributo _FillValue como -999. Na linha seguinte, usamos a funo

default_llvalue para denir o valor auNa penltima

sente padro para variveis tipo double. Na prxima linha, criamos uma nova varivel, x, para a qual denimos como valor ausente 1e20. atributo da varivel x. linha, passamos o valor do atributo _FillValue da varivel y para o mesmo Por m, a ltima linha faz a mesma coisa que a penltima, mas usando a funo

assignFillValue.
95

96
Tabela D.1:

Captulo D. Valores ausentes no NCL


Valores ausentes padro para os vrios tipos de variveis do

NCL. Estes valores so especicados para as verses anteriores e posteriores verso 6.0.0, a qual trouxe mudanas importantes a eles.

Tipo da varivel
byte short ushort integer uint long ulong int64 uint64 oat double character

verses 5.2.x e anteriores 0x -99 0 -999 0 -9999 0 -99999999 0 -999 -9999 0

verses 6.x e posteriores -127 -32767 65535 -2147483647 4294967295 -2147483647 4294967295 -9223372036854775806 18446744073709551614 9.96921e+36 9.969209968386869e+36 0x00

D.1 O uso de _FillValue em funes do NCL


Muitas funes do NCL ignoram automaticamente qualquer elemento cujo valor igual ao do seu atributo _FillValue. O exemplo abaixo ilustra isto:

x = (/1., 2., 3., 4., 5./) print(avg(x)) x@_FillValue = 5. print(avg(x))

Neste exemplo, usamos a funo

avg para calcular a mdia aritmtica dos

elementos do arranjo unidimensional x, que no primeiro clculo igual a 3.0. Quando denimos o atributo _FillValue de x como o valor 5.0, o novo clculo da mdia ignora automaticamente o elemento cujo valor igual a 5.0. Portanto, a mdia calculada agora 2.5.

Muitas funes grcas tambm reconhecem este atributo e no plotam dados que tenho valores iguais a ele.

D.2. Valores ausentes padro

97

D.2 Valores ausentes padro


Ao se criar uma varivel no NCL e no se denir explicitamente o seu atributo

_FillValue, o NCL dene-o automaticamente usando valores padro, que


dependem do tipo de dados usado. A Tabela D.1 lista estes valores padro.

D.3 O atributo

missing_value
Se queremos que o NCL

possvel encontrar variveis contendo um atributo chamado missing_value. O NCL no reconhecer este atributo e, portanto, plotar e realizar clculos com valores denidos como missing_value. reconhea estes valores como ausentes, necessrio renomear este atributo: x@_FillValue = x@missing_value delete(x@missing_value) Sempre que passado um novo valor ao atributo _FillValue, toda ocorrncia de valores ausentes igual ao antigo valor deste atributo ser alterada para o novo valor. Para ilustrar isso, vamos usar o vetor x criado acima, para o Veja o que ocorre se qual passamos o valor 5.0 ao atributo _FillValue. redenirmos o valor deste atributo: x@_FillValue = 10. print(x) Variable: x Type: oat Total Size: 20 bytes 5 values Number of Dimensions: 1 Dimensions and sizes: [5] Coordinates: Number Of Attributes: 1 _FillValue : 10 (0) 1 (1) 2 (2) 3 (3) 4 (4) 10

98

Captulo D. Valores ausentes no NCL

Compare o contedo do vetor x agora com o contedo inicial. fcil notar que o ltimo valor, que era igual a 5.0 foi alterado para 10.0.

D.4 _FillValue = 0
Uma nota importante sobre a atribuio do valor 0 (zero) ao atributo _Fill-

Value : permitida esta atribuio, mas no recomendada, uma vez que


isto no funcionar para grcos de contornos. Isto um problema grco de baixo nvel, ou seja, um problema na programao do NCL. Portanto, evite passar a este atributo o valor 0 (zero).

Você também pode gostar