Escolar Documentos
Profissional Documentos
Cultura Documentos
NCL PTBR
NCL PTBR
FACULDADE DE METEOROLOGIA
DEPARTAMENTO DE METEOROLOGIA
Novembro, 2011
Prefcio
Esta apostila busca passar aos seus leitores uma breve introduo ao NCAR
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
Instalao
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
1.2
Executando o NCL . . . . . . . . . . . . . . . . . . . . . . . .
13
A Linguagem
15
2.1
Smbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
2.2
Tipos de dados
16
2.3
Palavras-chave reservadas
. . . . . . . . . . . . . . . . . . . .
16
2.4
Expresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2.5
Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
2.6
19
2.6.1
Laos de repetio
19
2.6.2
A construo
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
22
Dimenses e indexao . . . . . . . . . . . . . . . . . . . . . .
23
2.7.1
Indexao padro . . . . . . . . . . . . . . . . . . . . .
23
2.7.2
24
2.8
Reduo de dimenso . . . . . . . . . . . . . . . . . . . . . . .
24
2.9
Dimenses nomeadas . . . . . . . . . . . . . . . . . . . . . . .
25
2.7
SUMRIO
2.9.1
Reordenao de dimenses . . . . . . . . . . . . . . . .
25
26
2.11 Atributos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
2.12 _FillValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
2.13 Coero
27
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
28
28
31
3.1
. . . . . . . . . . . . . . . . . . . . . . .
31
34
Arquivos Suportados
3.1.1
3.2
3.3
3.4
3.2.2
. . . . . . . . . . . . . . . . .
35
35
. . . . . . . . . . . . . .
36
. . . . . . . . . . . . . . . . . . . .
37
3.3.1
3.3.2
. . . . . . . . . . . . . . .
38
. . . . . . . . . . . . . . .
40
42
3.4.1
3.5
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
38
43
Impresso
45
4.1
printVarSummary . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.2
print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
4.3
sprintf e sprinti
. . . . . . . . . . . . . . . . . . . . . . . . . .
47
4.4
write_matrix
. . . . . . . . . . . . . . . . . . . . . . . . . . .
49
SUMRIO
5
Anlise de Dados
51
5.1
Sintaxe de arranjos . . . . . . . . . . . . . . . . . . . . . . . .
51
5.2
Conformao da matriz . . . . . . . . . . . . . . . . . . . . . .
53
5.3
. . . . . . . . . . . . . . .
54
5.4
Funes e subrotinas
. . . . . . . . . . . . . . . . . . . . . . .
55
Linhas de comando
57
6.1
. . . . . . . . . . . . . .
6.2
. .
57
58
61
7.1
Interface NCL/Fortran . . . . . . . . . . . . . . . . . . . . . .
61
7.2
Subrotinas em Fortran 77
. . . . . . . . . . . . . . . . . . . .
62
7.3
Subrotinas em Fortran 90
. . . . . . . . . . . . . . . . . . . .
63
7.4
7.5
7.6
7.7
. . . . . . . . . . . . . . . . . .
64
. . . . . . . . . . . . . . . . . . . . . .
65
. . . . . . . . . . . . .
. . . . . . . . . . .
66
67
Grcos
69
8.1
Um script simples . . . . . . . . . . . . . . . . . . . . . . . . .
70
8.2
72
8.3
74
8.4
As funes
draw e frame . . . . . . . . . . . . . . . . . . . .
77
8.5
. . . . . . . . . . . . . .
79
SUMRIO
83
89
91
95
D.1
96
D.2
. . . . . . . . . . . . . . . . . . . . .
97
D.3
O atributo missing_value
. . . . . . . . . . . . . . . . . . . .
97
D.4
_FillValue = 0
. . . . . . . . . . . . . . . . . . . . . . . . . .
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.
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
10
Captulo 1. Introduo
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.
1.1. Instalao
11
Na
posse
destas
informaes,
http://www.earthsystemgrid.org
possvel
verso
do
baixar
NCL
do
site
apropriada
para
ncl_ncarg-
5.2.1.Linux_i686_gcc432.tar.gz.
A seguir, deve-se descompactar este arquivo, digitando, num terminal:
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
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
source .bashrc.
bashrc ! Ele faz parte do nome do arquivo; neste caso, um arquivo oculto.
13
mode) .
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
$
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
ncl
ncl
ncl
ncl
teste.ncl
teste.ncl >& teste.out
teste.ncl >& teste.out &
< teste.ncl
[aceitvel]
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
[. . . ]
(/. . . /)
::
->
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.
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
+
17
subtrao
multiplicao
multiplicao matricial
exponenciao
>,<
print:
x=10+11
y=10-11
z=1011.1
k=x 2
l=10%11
m=10<11
Operadores lgicos:
.lt.
menor que
.le.
menor ou igual a
.gt.
maior que
.ge.
maior ou igual a
.ne.
diferente de
.eq.
.and.
.or.
igual a
e
ou
.xor.
ou exclusivo
.not.
no
print:
18
Captulo 2. A Linguagem
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
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
_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.
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.
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
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
Captulo 2. A Linguagem
do ... end do
Sintaxe:
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
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
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
executando o comando
22
Captulo 2. A Linguagem
2.6.2
Por vezes, pode ser importante estabelecer um critrio que denir que conjunto de comandos ser executado.
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
a padro e
2.7.1
Indexao padro
print(x(0))
; imprime 1
print(x(4))
; imprime 5
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
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
25
Caso no
2.9.1
Reordenao de dimenses
es 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
Usando o exem-
lat = (/-10,-20/)
lon = (/-60,-50,-40,-30/)
y&lat = lat
y&lon = lon
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:
2.12. _FillValue
27
2.12 _FillValue
O atributo
y@_FillValue = -999
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
Neste exemplo,
k = x
k =
oattointeger(x)
28
Captulo 2. A Linguagem
printVarSummary s variveis a e b.
quando se deseja reutilizar uma varivel, mas os novos valores e/ou tipos so
diferentes da varivel original.
Quando uma varivel passada
da memria.
29
teste
integer x [ 1 ]
delete( y@teste )
list_vars()
integer y [ 1 ]
integer x [ 1 ]
delete( x )
delete( y )
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
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
(somente cray ).
io.shtml
arquivo.
O site
http://www.ncl.ucar.edu/Applications/list_
.nc ou .cdf
HDF4
.hd ou .hdf
HDF4-EOS
hdfeos
GRIB-1 ou GRIB-2
.grb ou .grib
.ccm
1 o formato de arquivo dos modelos climticos globais CCM1, CCM2 e CCM3, escritos
pelo NCAR.
31
32
"c"
"w"
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
doarquivo.nc .
34
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
3.1.1
A funo
gfsprevisao00.grb, gfsprevisao06.grb,
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
http://www.ncl.ucar.edu/Document/
Functions/Built-in/setfileoptions.shtml.
a pgina de documentao do ncl:
35
Os binrios
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
36
cbinread, fbin-
read e craybinrecread.
3.2.2
sequencial no formatado.
Sintaxe:
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
37
fbindirwrite("/meu/diretorio/samp.dat",x)
end do
//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-
write e fbinwrite.
Lendo e escrevendo arquivos
big endian
little endian :
addle. Entretanto,
38
3.3.1
24
12
28
14
sional.
inteiros.
3.3.2
A subrotina
rivel.
passada subrotina
39
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
40
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
Esse
41
42
3.4.1
ncl_convert2nc,
http://www.ncl.ucar.edu/Document/Tools/ncl_convert2nc.shtml.
43
OPenDAP
O acesso via
OPeNDAP:
islepresent.
Note que o usurio pode ser bloqueado por um rewall, no tendo acesso aos
dados remotos. Alm disso, alguns servidores
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:
printVarSummary
printFileVarSummary
Fornece um resumo de uma varivel associada a um arquivo (presente a partir da verso 6.0.0 do NCL).
printVar-
write_matrix
4.1 printVarSummary
Esta subrotina exibe as informaes associadas com uma varivel.
Estas
45
46
Captulo 4. Impresso
x=10
printVarSummary(x)
y=(/1,2,3,4,5/)
printVarSummary(y)
z=(/ (/1,2/), (/3,4/) /)
printVarSummary(z)
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
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:
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
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
Captulo 4. Impresso
(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
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
sprintf :
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.
4.4. write_matrix
49
4.4 write_matrix
A subrotina
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:
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
Captulo 4. Impresso
x=(/ (/1,2/), (/3,4/) /)
write_matrix(x, "2i2", False)
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.
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
D=A-B
E=A*B
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:
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
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
_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
A funo
http://ncl.ucar.edu/Document/Functions/Built-in/conform.
shtml e http://ncl.ucar.edu/Document/Functions/Built-in/conform_
dims.shtml.
lhes veja:
a_oat
a_double
(/4d0,5d-5,1d30/)
a_string
(/a,b,c/)
a_logical
a_2darray
2. Com a funo
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)
999.
b=new(10,oat,1e20)
1e20
c=new((/5,6,7/),integer)
999
9999
e=new( dimsizes(ndtooned(U)),logical)
-1
s=new(100,string)
missing"
q=new(3,oat,No_FillValue )
nenhum_FillValue
55
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.
56
oat, y deve
dimensionalidade.
2. Tipo genrico de prototipagem: nico tipo
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:
http:
//www.ncl.ucar.edu/Document/Manuals/RefManual/NclCLO.shtml.
-n
-x
-V
print.
57
58
Espaos no so permitidos.
59
60
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).
http://www.ncl.ucar.
edu/Document/Manuals/Ref_Manual/NclExtend.shtml.
C NCLFORTSTART
C NCLEND
para identicar a seo de interface.
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.
63
Fortran,
FOO::demo(xin,xout,nlon,nlat,text)
Infelizmente, o analisador
(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:
C NCLFORTSTART e C NCLEND:
http://pt.wikipedia.org/wiki/Stub.
64
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
C NCLEND
call rcurv(n,x,y,nd,b,s,st) ! nome na IMSL
return
end
end
WRAPIT -h
66
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.
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).
Fortran
x(time,lev,lat,lon)
<=map=>
x(lon,lat,lev,time)
<==>
x(M,N) : Fortran
x(0,0)
<==>
x(1,1)
x(0,1)
<==>
x(2,1)
<==>
x(3,1)
x(1,0)
<==>
x(1,2)
x(1,1)
<==>
x(2,2)
x(1,2)
<==>
x(3,2)
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
Captulo 8
Grcos
O NCL possui trs reas distintas.
inteiramente, mas que pores dela possam ser acessadas, por meio das regras
de indexao de variveis de arquivo.
As sintaxes dos
O NCL usa
http://www.ncl.ucar.edu/Applications/
69
- para
70
Captulo 8. Grcos
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
Figura 8.1:
71
[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.
alterar este comportamento padro. Isto feito por meio de recursos grcos
especcos.
Pronto!
x = 0,
x = 1
x = 99,
o segundo em
Os
73
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
Figura 8.2:
75
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
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.
76
Captulo 8. Grcos
Figura 8.3:
(j, i),
desenhar a
77
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
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.
79
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
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)
81
; plotando grco
plot = gsn_csm_contour_map( wks, pnmm, opcoes )
end
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.
bais. Caso este recurso no tivesse sido denido desta maneira as isolinhas
do campo no seriam plotadas.
Figura 8.5:
detalhes.
82
eles denem a rea do mapa a ser plotado.
Captulo 8. Grcos
Caso eles no tivessem sido
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.
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
Figura A.1:
88
aacute = "aH-13V2F35BFV-2H3"
A explicao se dar quase caractere por caractere:
a
H-13
V2
F35
cima.
B
V-2
H3
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
abri-lo usando esta funo em seu modo habitual. Assim, os dados so lidos
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")
89
90
str_get_eld:
stringtooat:
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 ),
stringtoint
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
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
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-
A Figura C.1
Figura C.1:
94
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.
x@_FillValue = -999
x@_FillValue = default_llvalue("double")
x = new( 5, double, 1e20 )
x@_FillValue = y@_FillValue
assignFillValue(y,x)
sente padro para variveis tipo double. Na prxima linha, criamos uma nova
varivel, x, para a qual denimos como valor ausente 1e20.
Na penltima
assignFillValue.
95
96
Tabela D.1:
Tipo da varivel
byte
0x
-127
short
-99
-32767
ushort
65535
integer
-999
-2147483647
uint
4294967295
long
-9999
-2147483647
ulong
4294967295
int64
-99999999
-9223372036854775806
18446744073709551614
uint64
oat
double
character
-999
9.96921e+36
-9999
9.969209968386869e+36
0x00
97
D.3 O atributo
missing_value
98
D.4 _FillValue = 0
Uma nota importante sobre a atribuio do valor 0 (zero) ao atributo _Fill-