Documente Academic
Documente Profesional
Documente Cultură
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
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7
2.8 2.9
6
2.9.1
SUMRIO
Reordenao de dimenses . . . . . . . . . . . . . . . . 25 26 26 27 27 28 28
31
31 34 35 35 36 37 38 38 40 42 43
3.3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4
3.5
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
61
61 62 63 64 65 66 67
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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 . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
8
A Acentuando palavras em grcos do NCL
SUMRIO
83
89
91
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
1.1. Instalao
11
Na
posse
destas
informaes,
http://www.earthsystemgrid.org
possvel verso do
baixar NCL
do
site para
apropriada
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
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:
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
mkdir /home/manoel/ncarg
2. Mover os diretrios bin/, lib/ e include/ para o diretrio /home/manoel/ncarg, digitando o comando:
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
criar o arquivo .cshrc, tambm localizado no diretrio de trabalho do usurio, e inserir as seguintes linhas:
source .bashrc.
bashrc ! Ele faz parte do nome do arquivo; neste caso, um arquivo oculto.
13
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
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
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.
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
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.
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
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:
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
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
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 =
19
new
_FillValue.
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.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).
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
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 (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 (x.le.10)
21
end do
que mostra que os comandos entre
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,
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
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 (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.
23
else
print("x estah fora do intervalo [0,10]!")
end if
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
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(:)
2.7.2
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
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.
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
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
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:
Passamos atributos que informam a unidade fsica dos dados e a data de coleta.
2.12. _FillValue
27
2.12 _FillValue
O atributo
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,
k = x
Quando informao pode ser perdida, funes de converso explcita devem ser usadas:
k =
oattointeger(x)
28
Captulo 2. A Linguagem
printVarSummary s variveis a e b.
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
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
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
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
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
1 o formato de arquivo dos modelos climticos globais CCM1, CCM2 e CCM3, escritos
pelo NCAR.
31
32
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
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
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
$:
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
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
em formato suportado. A informao visualizada similar quela mostrada pelo aplicativo netCDF/Unidata utilizando o comando ncdump -h nome-
doarquivo.nc .
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.
34
No primeiro exemplo a varivel TMP originalmente do tipo short, porm temperatura do tipo oat. Semelhantemente, no segundo exemplo a varivel
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
3.1.1
A funo
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
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:
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
http://www.ncl.ucar.edu/Document/ Functions/Built-in/setfileoptions.shtml.
a pgina de documentao do ncl:
35
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
Vrias funes lem dados de arquivos binrios. A maior parte l binrios IEEE e vrios lem binrios CRAY. A funo
sequencial no-formatado. Os registros, que comeam com 0, podem ser de vrios tipos e tamanhos. Sintaxe:
tamanho de registro xo (acesso direto). Todos os registros do arquivo devem ser do mesmo tipo e dimenso. Sintaxe:
36
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
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
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:
37
//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.
cbin-
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
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
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
A subrotina rivel.
asciiwrite cria um arquivo ASCII com o contedo de uma vaasciiwrite, ela criar um arquivo ASCII contendo um
passada subrotina
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
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
subrotina imprimiria a matriz na tela. A formatao do arquivo denida no segundo argumento da subrotina
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
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.
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
lento, particularmente se existem muitas variveis ou a sada resultante do arquivo muito extensa.
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:
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
42
abrir->lat = (/lat/) abrir->lon = (/lon/) abrir->TMP = (/T/)
3.4.1
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.
43
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
44
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:
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-
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)
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
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).
47
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
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.
4.4 write_matrix
A subrotina
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
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
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.
htt://www.ncl.ucar.edu/Document/Manuals/Ref_Manual/NclUsage.shtml
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.
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:
F= 2*E+5
far com que cada elemento da matriz E seja multiplicado por 2 e em seguida
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:
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.
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
54
P=(/1000,850,700/) T=5. Pconform=conform(T,P,1)
A funo
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:
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/) /)
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
55
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,
valor mximo, o seno e o exponencial do argumento passado a elas. O exemplo seguinte ilusta o uso de funes em expresses matemticas z=
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.
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
oat, y deve
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.
//www.ncl.ucar.edu/Document/Manuals/RefManual/NclCLO.shtml.
http:
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
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.
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
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
http://www.ncl.ucar. edu/Document/Manuals/Ref_Manual/NclExtend.shtml.
C NCLFORTSTART C NCLEND
para identicar a seo de interface. O Note que os delimitadores esto na
62
C NCLFORTSTART
subroutine demo(xin,xout,mlon,nlat,text) integer mlon, nlat real xin(mlon,nlat), xout(mlon,nlat) character*(*) text
C NCLEND
foo.f. Este arquivo pode conter uma ou mais subrotinas escritas em Fortran
77.
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,
63
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:
C NCLFORTSTART e C NCLEND:
http://pt.wikipedia.org/wiki/Stub.
64
C NCLFORTSTART
C NCLEND
end
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)
65
end
WRAPIT -h
66
O WRAPIT faz as seguintes tarefas:
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.
ld.
4. Apaga os arquivos temporrios para que reste apenas o arquivo do objeto compartilhado (.so).
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)
67
#!/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
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
69
70
Captulo 8. Grcos
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
71
Figura 8.1:
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],
ran-
72
Captulo 8. Grcos
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
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
x = 1 x = 99,
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/.
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:
75
Vamos discutir sobre este script se referenciando a blocos de linhas de comandos. O primeiro bloco aps o comando
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
Figura 8.3:
O terceiro bloco de linhas de comando cria o campo ctcio de PNMM usando dois laos de repetio Cada loop
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),
de PNMM dados pela funo usada neste bloco. Nos blocos seguintes, no temos nada de novo, exceto pelo uso de uma nova funo:
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
77
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,
Os atributos
78
es
Captulo 8. Grcos
gsn_* no devem ser desenhadas instantaneamente e que a pgina de
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
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
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
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
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.
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
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)
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
bais. Caso este recurso no tivesse sido denido desta maneira as isolinhas do campo no seriam plotadas.
Figura 8.5:
detalhes.
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
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
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
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
Figura A.1:
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
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
abri-lo usando esta funo em seu modo habitual. Assim, os dados so lidos
89
90
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
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
http://www.ncl.ucar.edu/Document/.
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
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-
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 -
94
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
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:
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
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.
97
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
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-